如何使用numpy.multiply中的'where'选项?



我需要将数组(NIR(与标量(f(相乘,但保留一些满足特定条件的值不变。

我尝试了以下方法:

NIR_f = np.multiply(NIR,f,where=NIR!=-28672.0)

要检查我所做的:

i,j=1119,753
NIR[i][j],NIR_f[i][j]

我得到了这个:

(-28672.0, 10058.0)

假设两个结果应该相同!在该位置,不满足条件,因此值应保持不变。

我是否错误地使用了"位置"选项?

没有你的数组,或者一个更小的替代品,我无法完全复制你的问题。 但可能存在 2 个问题

  • 浮点测试不精确,因此它可能匹配一个 -28672.0,而不是另一个。

  • remain intact假设是棘手的。leave the value in the output alone,但它最初是什么,0 或NIR值。


使用整数数组来避免浮点问题:

In [20]: arr = np.arange(12).reshape(3,4)
In [21]: arr
Out[21]: 
array([[ 0,  1,  2,  3],
[ 4,  5,  6,  7],
[ 8,  9, 10, 11]])
In [22]: np.multiply(arr, 10, where=arr!=10)
Out[22]: 
array([[           0,           10,           20,           30],
[          40,           50,           60,           70],
[          80,           90, 481036337249,          110]])
In [24]: np.multiply(arr, 10, where=arr!=10)
Out[24]: 
array([[  0,  10,  20,  30],
[ 40,  50,  60,  70],
[ 80,  90,   0, 110]])

arr[2,2]是随机的。 实际上,它从一个具有正确形状和 dtype 的np.empty数组开始,并用乘法填充除该值之外的所有值。 为了正确使用where,我们还需要指定一个out参数。

In [25]: out = np.full(arr.shape,-1)
In [26]: out
Out[26]: 
array([[-1, -1, -1, -1],
[-1, -1, -1, -1],
[-1, -1, -1, -1]])
In [27]: np.multiply(arr, 10, where=arr!=10, out=out)
Out[27]: 
array([[  0,  10,  20,  30],
[ 40,  50,  60,  70],
[ 80,  90,  -1, 110]])

不精确的浮点数问题经常出现,我不会试图说明这一点。

最新更新