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

时间:2018-05-02 15:45:25

标签: numpy

我需要将数组(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)

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

我使用"其中"选项错误?

1 个答案:

答案 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]])

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