计算二维Numpy数组的加权和

时间:2020-06-10 12:56:09

标签: python numpy

我有一个尺寸为2 x 2(在numpy.float32 dtype中的numpy 2D数组

[[0.001 0.02],
 [0.3 0.9]]

我想为给定矩阵创建一个新的掩码矩阵,

if a1<= matrix element <a2:
    new element = a3
if b1<= matrix element <b2:
    new element = b3
... Can have up to 10 conditions like this

例如,如果条件是:

if 0.0<= matrix element <0.05:
    new element = 10
if 0.05<= matrix element <1.0:
    new element = 5

给定的矩阵应转换为:

[[10.0 10.0],
 [5.0 5.0]]

有人可以帮我获得具有给定条件集的任何给定矩阵的掩码矩阵吗?

用例 基本上不只是使用np.sum(numpy 2D array),而是要对矩阵元素进行加权求和。因此条件实际上是在定义权重。

一旦有了原始矩阵和掩码矩阵,我将对两个矩阵进行逐元素相乘,然后在生成的2D数组上使用np.sum

为了快速执行,可能希望尽可能少的for循环。我正在使用Python 3.7。

这个post很相似,但是并不能真正解决我的任务。

谢谢

1 个答案:

答案 0 :(得分:3)

您可以使用numpy.select和总结您的条件的字典来获得此结果。

arr = np.array([[0.001, 0.02], [0.3, 0.9]])
selection_dict = {10: (0<=arr)&(arr<0.05),
                  5:  (0.05<=arr)&(arr<1.0)}

In [52]: np.select(condlist=selection_dict.values(), choicelist=selection_dict.keys())
Out[52]: 
array([[10, 10],
       [ 5,  5]])