我需要将数组(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)
假设两个结果应该相同!在该位置,条件不符合,因此值应保持不变。
我使用"其中"选项错误?
答案 0 :(得分:0)
如果没有您的阵列或更小的替代品,我无法完全复制您的问题。但是可能有两个问题
浮动测试不准确,因此它可能匹配一个-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]])
不精确花车的问题经常出现,我不会试图说明这一点。