Каков ожидаемый эффект от того, где NumPy отрицательный? - PullRequest
0 голосов
/ 18 января 2019

Насколько я понимаю, в документации к функции numpy negative ее опция where позволяет вам оставить некоторые компоненты массива без изменений:

>>> import numpy as np
>>> np.negative(np.array([[1.,2.],[3.,4.],[5.,6.]]), where=[True, False])
array([[-1., 2.],
       [-3., 4.],
       [-5., 6.]])

Однако, когда я пытаюсь это сделать, кажется, что эти значения (почти) обнуляются вместо:

>>> import numpy as np
>>> np.negative(np.array([[1.,2.],[3.,4.],[5.,6.]]), where=[True, False])
array([[-1.00000000e+000,  6.92885436e-310],
       [-3.00000000e+000,  6.92885377e-310],
       [-5.00000000e+000,  6.92885375e-310]])

Так, как я должен видеть опцию where?

1 Ответ

0 голосов
/ 18 января 2019

Документация описывает 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).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...