Tenho problemas para entender corretamente, numpy.where()
apesar de ler o documento , esta postagem e esta outra postagem .
Alguém pode fornecer exemplos comentados passo a passo com matrizes 1D e 2D?
Tenho problemas para entender corretamente, numpy.where()
apesar de ler o documento , esta postagem e esta outra postagem .
Alguém pode fornecer exemplos comentados passo a passo com matrizes 1D e 2D?
Respostas:
Depois de mexer um pouco, descobri as coisas e as estou postando aqui esperando que ajude os outros.
Intuitivamente, np.where
é como perguntar " diga-me onde, nessa matriz, as entradas atendem a uma determinada condição ".
>>> 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
Também pode ser usado para obter entradas na matriz que atendem à condição:
>>> a[np.where(a < 8)]
array([5, 6, 7]) # selects from a entries 0, 1, 2
Quando a
é uma matriz 2D, np.where()
retorna uma matriz de linhas idx e uma matriz de colunas idx:
>>> a = np.arange(4,10).reshape(2,3)
array([[4, 5, 6],
[7, 8, 9]])
>>> np.where(a > 8)
(array(1), array(2))
Como no caso 1d, podemos usar np.where()
para obter entradas na matriz 2d que atendem à condição:
>>> a[np.where(a > 8)] # selects from a entries 0, 1, 2
matriz ([9])
Observe que, quando a
1d, np.where()
ainda retorna uma matriz de idx de linha e uma matriz de id de coluna, mas as colunas têm o comprimento 1, portanto, a última é uma matriz vazia.
np.where(2d_array)
, obrigado por esclarecer isso! Você deve aceitar sua própria resposta. e: Ah, está fechado. Bem, não deveria ser
np.where
a essa resposta completa. A função também pode selecionar elementos das matrizes x e y, dependendo da condição. Espaço limitado neste comentário, mas veja: 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]]))
retornará array([[4, 8, 6], [9, 2, 1]])
. Observe quais elementos de x e y se escolhidos dependendo Verdadeiro / Falso
condition
é fornecida, esta função é uma abreviação para np.asarray(condition).nonzero()
.
Aqui está um pouco mais divertido. Descobri que, muitas vezes, o NumPy faz exatamente o que eu gostaria que ele fizesse - às vezes é mais rápido para mim tentar coisas do que ler os documentos. Na verdade, uma mistura de ambos é a melhor.
Acho que sua resposta é boa (e não há problema em aceitá-la, se quiser). Isso é apenas "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]))
... mas:
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]