据我了解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
选项?
答案 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
自己创建输出数组)。