J'ai du mal à bien comprendre numpy.where()
malgré la lecture de la doc , de cet article et de cet autre article .
Quelqu'un peut-il fournir des exemples commentés étape par étape avec des tableaux 1D et 2D?
J'ai du mal à bien comprendre numpy.where()
malgré la lecture de la doc , de cet article et de cet autre article .
Quelqu'un peut-il fournir des exemples commentés étape par étape avec des tableaux 1D et 2D?
Réponses:
Après avoir bidouillé pendant un moment, j'ai compris les choses et je les affiche ici en espérant que cela aidera les autres.
Intuitivement, np.where
c'est comme demander " dites-moi où dans ce tableau, les entrées satisfont une condition donnée ".
>>> 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
Il peut également être utilisé pour obtenir des entrées dans un tableau qui satisfont à la condition:
>>> a[np.where(a < 8)]
array([5, 6, 7]) # selects from a entries 0, 1, 2
Quand a
est un tableau 2d, np.where()
renvoie un tableau d'idx de ligne et un tableau d'idx de col:
>>> a = np.arange(4,10).reshape(2,3)
array([[4, 5, 6],
[7, 8, 9]])
>>> np.where(a > 8)
(array(1), array(2))
Comme dans le cas 1d, nous pouvons utiliser np.where()
pour obtenir des entrées dans le tableau 2d qui satisfont la condition:
>>> a[np.where(a > 8)] # selects from a entries 0, 1, 2
tableau ([9])
Notez que quand a
vaut 1d, np.where()
renvoie toujours un tableau d'idx de ligne et un tableau d'idx de col, mais les colonnes sont de longueur 1, donc cette dernière est un tableau vide.
np.where(2d_array)
, merci d'avoir clarifié cela! Vous devez accepter votre propre réponse. e: Oh, c'est fermé. Eh bien, ça ne devrait pas être
np.where
à cette réponse par ailleurs complète. La fonction peut également sélectionner des éléments du tableau x et y en fonction de la condition. Espace limité dans ce commentaire mais voir: 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]]))
reviendra array([[4, 8, 6], [9, 2, 1]])
. Remarquez quels éléments de x et y sont choisis en fonction de Vrai / Faux
condition
est fourni, cette fonction est un raccourci pour np.asarray(condition).nonzero()
.
Voici un peu plus amusant. J'ai constaté que très souvent NumPy fait exactement ce que je souhaite qu'il fasse - parfois, il est plus rapide pour moi d'essayer des choses que de lire la documentation. En fait, un mélange des deux est préférable.
Je pense que votre réponse est bonne (et vous pouvez l'accepter si vous le souhaitez). C'est juste "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
donne:
wh: (array([1, 1]), array([1, 2]))
gt: [[False False False]
[False True True]]
x: (array([1, 1]), array([1, 2]))
... mais:
print "a[wh]: ", a[wh]
print "a[gt] ", a[gt]
print "a[x]: ", a[x]
donne:
a[wh]: [8 9]
a[gt] [8 9]
a[x]: [8 9]