web-dev-qa-db-fra.com

numpy.where () des explications détaillées, des exemples pas à pas

J'ai du mal à bien comprendre numpy.where() malgré la lecture de le doc , cet article et cet autre article .

Quelqu'un peut-il fournir des exemples commentés, étape par étape, avec des tableaux 1D et 2D?

148

Après avoir bricolé pendant un moment, j’ai compris la situation et je l’affiche ici en espérant que cela aidera les autres.

Intuitivement, np.where revient à 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 remplissent 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 de lignes idx et un tableau de colonnes idx:

>>> a = np.arange(4,10).reshape(2,3)
array([[4, 5, 6],
       [7, 8, 9]])
>>> np.where(a > 8)
(array(1), array(2))

Ainsi, comme dans le cas 1d, nous pouvons utiliser np.where() pour obtenir des entrées dans le tableau 2d qui remplissent la condition:

>>> a[np.where(a > 8)] # selects from a entries 0, 1, 2

tableau ([9])


Notez que, lorsque a vaut 1d, np.where() renvoie toujours un tableau de lignes idx et un tableau de col idx, mais les colonnes ont une longueur de 1; ce dernier est donc un tableau vide.

242

Voici un peu plus amusant. J'ai souvent constaté que NumPy faisait exactement ce que je souhaiterais - parfois c'est plus rapide pour moi d'essayer quelque chose que de lire la documentation. En fait, un mélange des deux est préférable.

Je pense que votre réponse est correcte (et que vous pouvez l’accepter si vous le souhaitez). Ceci 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]
17
uhoh