Ho difficoltà a capire correttamente numpy.where()
nonostante abbia letto il documento , questo post e questo altro post .
Qualcuno può fornire esempi commentati passo-passo con array 1D e 2D?
Ho difficoltà a capire correttamente numpy.where()
nonostante abbia letto il documento , questo post e questo altro post .
Qualcuno può fornire esempi commentati passo-passo con array 1D e 2D?
Risposte:
Dopo aver armeggiato per un po ', ho capito le cose e le sto postando qui sperando che possa aiutare gli altri.
Intuitivamente, np.where
è come chiedere " dimmi dove in questo array, le voci soddisfano una determinata condizione ".
>>> a = np.arange(5,10)
>>> np.where(a < 8) # tell me where in a, entries are < 8
(array([0, 1, 2]),) # answer: entries indexed by 0, 1, 2
Può anche essere utilizzato per ottenere voci nell'array che soddisfano la condizione:
>>> a[np.where(a < 8)]
array([5, 6, 7]) # selects from a entries 0, 1, 2
Quando a
è un array 2d, np.where()
restituisce un array di idx di riga e un array di id di col:
>>> a = np.arange(4,10).reshape(2,3)
array([[4, 5, 6],
[7, 8, 9]])
>>> np.where(a > 8)
(array(1), array(2))
Come nel caso 1d, possiamo usare np.where()
per ottenere voci nell'array 2d che soddisfano la condizione:
>>> a[np.where(a > 8)] # selects from a entries 0, 1, 2
array ([9])
Nota, quando a
è 1d, np.where()
restituisce comunque una matrice di idx di riga e una matrice di id di col, ma le colonne sono di lunghezza 1, quindi quest'ultima è una matrice vuota.
np.where(2d_array)
, grazie per averlo chiarito ! Dovresti accettare la tua risposta. e: Oh, è chiuso. Bene, non dovrebbe essere
np.where
a questa risposta altrimenti completa. La funzione può anche selezionare elementi dall'array xey in base alla condizione. Spazio limitato in questo commento ma vedi: np.where(np.array([[False,False,True], [True,False,False]]), np.array([[8,2,6], [9,5,0]]), np.array([[4,8,7], [3,2,1]]))
tornerà array([[4, 8, 6], [9, 2, 1]])
. Nota quali elementi di xey vengono scelti in base a Vero / Falso
condition
viene fornita solo , questa funzione è una scorciatoia per np.asarray(condition).nonzero()
.
Qui è un po 'più divertente. Ho scoperto che molto spesso NumPy fa esattamente quello che vorrei che facesse - a volte è più veloce per me provare le cose piuttosto che leggere i documenti. In realtà una miscela di entrambi è la cosa migliore.
Penso che la tua risposta vada bene (ed è OK accettarla se vuoi). Questo è solo "extra".
import numpy as np
a = np.arange(4,10).reshape(2,3)
wh = np.where(a>7)
gt = a>7
x = np.where(gt)
print "wh: ", wh
print "gt: ", gt
print "x: ", x
dà:
wh: (array([1, 1]), array([1, 2]))
gt: [[False False False]
[False True True]]
x: (array([1, 1]), array([1, 2]))
... ma:
print "a[wh]: ", a[wh]
print "a[gt] ", a[gt]
print "a[x]: ", a[x]
dà:
a[wh]: [8 9]
a[gt] [8 9]
a[x]: [8 9]