Python - Equivalente función find de Matlab

 
Vista:

Equivalente función find de Matlab

Publicado por Miquel (2 intervenciones) el 20/03/2007 18:57:29
Hola!

Estoy haciendo unas traducciones de unas funciones escritas en Matlab a lenguaje Python. Me he encontrado con la función find(), que busca en un array una cierta condición y te devuelve los índices del mismo donde esta se cumple.

Parece ser que su equivalencia podria ser algo como (a>2).nonzero(), donde a es el array sobre el que buscar. El problema viene con el tipo de datos que nos devuelve esta función. No puedo manejarlo, en prinicpio debería ser un array pero obtengo lo siguiente:

>>> from numpy import *
>>> a=array([0,1,0,1,2,0,1,2,0,0])
>>> print a
[0 1 0 1 2 0 1 2 0 0]
>>> b=(a>0).nonzero()
>>> print b
(array([1, 3, 4, 6, 7]),)
>>> print (a>0).nonzero()
(array([1, 3, 4, 6, 7]),)

Alguien sabe como solucionarlo?

Gracias de antemano,
Miquel
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Equivalente función find de Matlab

Publicado por Miquel Poch (2 intervenciones) el 27/03/2007 16:41:56
Encontré la solución!

La función, tal i como se esta realizando la llamada, devuelve dos vectores con las coordenadas donde se cumple la condición.

Por tanto, si tan solo nos interesa obtener el primer vector (ya que la búsqueda es sobre un vector, por tanto las coordenadas solo tienen una componente) tenemos que escribir lo siguiente:

>>> from numpy import *
>>> a=array([0,1,0,1,2,0,1,2,0,0])
>>> print a
[0 1 0 1 2 0 1 2 0 0]
>>> b=(a>0).nonzero()[0]
>>> print b
[1, 3, 4, 6, 7]
>>> print (a>0).nonzero()[0]
[1, 3, 4, 6, 7]
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar