Я экспериментирую с функцией numpy.where(condition[, x, y])
.
Из документа numpy, я узнаю, что если вы укажете только один массив в качестве входных данных, он должен вернуть индексы, в которых массив не равен нулю (т.е. "True" ):
Если задано только условие, верните условие кортежа. nonzero(), индексы, где условие истинно.
Но если попробовать, он возвращает мне кортеж из двух элементов, где первый - это нужный список индексов, а второй - нулевой элемент:
>>> import numpy as np
>>> array = np.array([1,2,3,4,5,6,7,8,9])
>>> np.where(array>4)
(array([4, 5, 6, 7, 8]),) # notice the comma before the last parenthesis
так что вопрос: почему? Какова цель этого поведения? в какой ситуации это полезно?
Действительно, чтобы получить разыскиваемый список индексов, я должен добавить индексацию, как в np.where(array>4)[0]
, которая кажется... "уродливой".
ДОПОЛНЕНИЕ
Я понимаю (из некоторых ответов), что это на самом деле кортеж только одного элемента. Тем не менее я не понимаю, зачем давать результат таким образом. Чтобы проиллюстрировать, как это не идеально, рассмотрите следующую ошибку (которая в первую очередь мотивировала мой вопрос):
>>> import numpy as np
>>> array = np.array([1,2,3,4,5,6,7,8,9])
>>> pippo = np.where(array>4)
>>> pippo + 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only concatenate tuple (not "int") to tuple
так что вам нужно сделать некоторую индексацию для доступа к фактическому массиву индексов:
>>> pippo[0] + 1
array([5, 6, 7, 8, 9])