Numpy obtener índice donde el valor es verdadero

>>> ex=np.arange(30) >>> e=np.reshape(ex,[3,10]) >>> e array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [20, 21, 22, 23, 24, 25, 26, 27, 28, 29]]) >>> e>15 array([[False, False, False, False, False, False, False, False, False, False], [False, False, False, False, False, False, True, True, True, True], [ True, True, True, True, True, True, True, True, True, True]], dtype=bool) 

Necesito encontrar las filas que tienen verdadero o filas en e cuyo valor es más de 15. Podría iterar usando un bucle for, sin embargo, me gustaría saber si hay una manera en que numpy podría hacerlo de manera más eficiente.

Para obtener los números de fila donde al menos un elemento es mayor que 15:

 >>> np.where(np.any(e>15, axis=1)) (array([1, 2], dtype=int64),) 

Puede utilizar la función distinta de cero . devuelve los índices distintos de cero de la entrada dada.

Forma fácil

 >>> (e > 15).nonzero() (array([1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]), array([6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9])) 

Para ver los índices más limpios, utilice el método de transpose :

 >>> numpy.transpose((e>15).nonzero()) [[1 6] [1 7] [1 8] [1 9] [2 0] ... 

No es mala manera

 >>> numpy.nonzero(e > 15) (array([1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]), array([6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9])) 

o la forma limpia:

 >>> numpy.transpose(numpy.nonzero(e > 15)) [[1 6] [1 7] [1 8] [1 9] [2 0] ...