numpy负数在哪里的预期影响是什么?

时间:2019-01-18 08:54:24

标签: python numpy

据我了解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 :(得分:4)

文档对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”(在the implementation of np.negative()中不可见)创建了一个 empty 输出数组,这意味着值是不确定的。因此,where为False的位置将具有未初始化的值,可以是任何值。

这对我来说似乎很不对劲,但去年有一个NumPy issue提交,并被关闭。似乎不太可能更改,因此您必须解决它(例如,使用zeros自己创建输出数组)。