Sto sperimentando con la funzione numpy.where(condition[, x, y])
.
Dal numpy documentation, vengo a sapere che se si dà solo un array come input, dovrebbe restituire gli indici in cui la matrice è diverso da zero (vale a dire "True"):l'output di numpy.where (condizione) non è un array, ma una tupla di array: perché?
Se viene dato solo condizioni, restituire il tuple condition.nonzero(), gli indici dove la condizione è True.
Ma se provate, mi restituisce un tupla di due elementi, dove il primo è la lista dei ricercati degli indici, e il secondo è un elemento nullo:
>>> import numpy as np
>>> array = np.array([1,2,3,4,5,6,7,8,9])
>>> np.where(array>4)
(array([4, 5, 6, 7, 8]),) # notice the comma before the last parenthesis
quindi la domanda È perché? qual è lo scopo di questo comportamento? in quale situazione questo è utile? In effetti, per ottenere l'elenco di indici desiderato, devo aggiungere l'indicizzazione, come in np.where(array>4)[0]
, che sembra ... "brutto".
ADDENDUM
capisco (da alcune risposte) che in realtà è una tupla di un solo elemento. Ancora non capisco perché dare l'output in questo modo. Per illustrare come questo non è l'ideale, si consideri il seguente errore (che ha motivato la mia domanda in primo luogo):
>>> import numpy as np
>>> array = np.array([1,2,3,4,5,6,7,8,9])
>>> pippo = np.where(array>4)
>>> pippo + 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only concatenate tuple (not "int") to tuple
in modo che avete bisogno di fare un po 'indicizzazione per accedere alla matrice reale di indici:
>>> pippo[0] + 1
array([5, 6, 7, 8, 9])
E a proposito di 'np.argwhere'? – Divakar
Quello che vuoi è 'np.flatnonzero', che fa' a.ravel().diverso da zero() [0] '. – hpaulj