Документация описывает where
как это:
Значения True указывают на то, что для вычисления ufunc в этой позиции, значения False указывают, чтобы оставить значение только в выводе.
Давайте попробуем пример, используя параметр out
:
x = np.ones(3)
np.negative(np.array([4.,5.,6.]), where=np.array([False,True,False]), out=x)
Устанавливает x
в [1., -5., 1.]
и возвращает то же самое.
Это имеет некоторый смысл, если вы поймете, что «оставить значение в выходных данных» буквально означает, что выходное значение «не волнует», а не «совпадает с входным» (последняя интерпретация заключалась в том, как прочитай это тоже в первый раз).
Проблема возникает, когда вы указываете where
, но не out
. Очевидно, что " ufunc machinery " (который не виден в реализации np.negative()
) создает пустой выходной массив, что означает, что значения являются неопределенными. Таким образом, местоположения, в которых where
равно False, будут иметь неинициализированные значения, которые могут быть любыми.
Это кажется мне довольно неправильным, но была проблема NumPy , поданная в прошлом году и закрытая. Кажется маловероятным, что он изменится, поэтому вам придется обходить его (например, самостоятельно создавая выходной массив с помощью zeros
).