Resposta Antiga
é meio confusa. Dá a você os LOCAIS (todos eles) de onde sua declaração é verdadeira.
tão:
>>> a = np.arange(100)
>>> np.where(a > 30)
(array([31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
99]),)
>>> np.where(a == 90)
(array([90]),)
a = a*40
>>> np.where(a > 1000)
(array([26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,
94, 95, 96, 97, 98, 99]),)
>>> a[25]
1000
>>> a[26]
1040
Eu o uso como uma alternativa para list.index (), mas ele também tem muitos outros usos. Nunca o usei com matrizes 2D.
http://docs.scipy.org/doc/numpy/reference/generated/numpy.where.html
Nova resposta
Parece que a pessoa estava perguntando algo mais fundamental.
A questão era como VOCÊ poderia implementar algo que permita a uma função (como onde) saber o que foi solicitado.
Primeiro, observe que chamar qualquer um dos operadores de comparação é algo interessante.
a > 1000
array([False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, True,
True, True, True, True, True, True, True, True, True,
True, True, True, True, True, True, True, True, True,
True, True, True, True, True, True, True, True, True,
True, True, True, True, True, True, True, True, True,
True, True, True, True, True, True, True, True, True,
True, True, True, True, True, True, True, True, True,
True, True, True, True, True, True, True, True, True,
True`, True, True, True, True, True, True, True, True, True], dtype=bool)`
Isso é feito sobrecarregando o método "__gt__". Por exemplo:
>>> class demo(object):
def __gt__(self, item):
print item
>>> a = demo()
>>> a > 4
4
Como você pode ver, "a> 4" era um código válido.
Você pode obter uma lista completa e documentação de todas as funções sobrecarregadas aqui: http://docs.python.org/reference/datamodel.html
Algo incrível é como é simples fazer isso. TODAS as operações em python são feitas dessa forma. Dizer a> b é equivalente a a. gt (b)!
numpy.wheretem 2 'modos operacionais', primeiro um retorna oindices, ondecondition is Truee se os parâmetros opcionaisxeyestão presentes (o mesmo formatocondition, ou transmitido para tal formato!), Ele retornará valores dexquando decondition is Trueoutra formay. Portanto, isso tornawheremais versátil e permite que seja usado com mais frequência. Obrigado