python - argmin - numpy get index donde el valor es verdadero
numpy argmin (2)
Para obtener los números de fila donde al menos un elemento es más grande que 15:
>>> np.where(np.any(e>15, axis=1))
(array([1, 2], dtype=int64),)
>>> 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 las filas en e
cuyo valor es más de 15. Podría iterar usando un ciclo for, sin embargo, me gustaría saber si hay alguna manera de que Numpy pueda hacer esto de manera más eficiente.
Puedes usar la función nonzero . devuelve los índices distintos de cero de la entrada dada.
Camino 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, use el método de transpose
:
>>> numpy.transpose((e>15).nonzero())
[[1 6]
[1 7]
[1 8]
[1 9]
[2 0]
...
No es mal camino
>>> 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 manera limpia:
>>> numpy.transpose(numpy.nonzero(e > 15))
[[1 6]
[1 7]
[1 8]
[1 9]
[2 0]
...