Одна из причин может быть вызвана тем, что Array.Sort
был разработан в .NET 1.0, у которого не было никаких дженериков.
Документация описывает where
следующим образом:
Значения True указывают на то, что для вычисления ufunc в этой позиции, значения False указывают на то, чтобы оставить значение только в выходных данных. blockquote>
Давайте попробуем пример, используя параметр
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
).