【问题标题】:Numpy: how do I apply masks vectorwise?Numpy:如何以矢量方式应用蒙版?
【发布时间】:2023-03-21 15:20:01
【问题描述】:

我有一个 numpy 数组,它是一个向量列表,比如

arr1 = [ [ 1, 2 ], [ 2, 2 ], [ 5, 3 ], [ 9, -1 ], [ 6, 3 ], ... ]

对应x,y值对。我想使用 x 和 y 分量的标准设置一个掩码,例如 0

[ [ True, True ], [ True, True ], [ False, False ], [ False, False ], [ False, False ], ... ]

换句话说,对于数组中的每个向量,我希望掩码对两个分量都具有相同的真值,并且仅在满足 x 和 y 的条件时才返回 True。我试过类似的东西:

masked = numpy.ma.array(arr1, mask= [0<arr1[:,0]<4 & 0<arr1[:,1]<7, 0<arr1[:,0]<4 & 0<arr1[:,1]<7])

但它告诉我“具有多个元素的数组的真值是不明确的。”有没有办法在不使用循环或 if else 的情况下简洁地做到这一点?

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    使用输入数组:

    print(arr1)
    array([[ 1,  2],
           [ 2,  2],
           [ 5,  3],
           [ 9, -1],
           [ 6,  3]])
    

    您可以单独检查每一列的条件(请注意 NumPy 中的 chained comparisons don't work)。然后对两个条件进行按位与并广播到数组的形状:

    x = arr1[:,0] 
    y = arr1[:,1] 
    
    c1 = (x>0)&(x<4)
    c2 = (y>0)&(y<7)
    
    np.broadcast_to((c1&c2)[:,None], arr1.shape)
    array([[ True,  True],
           [ True,  True],
           [False, False],
           [False, False],
           [False, False]])
    

    【讨论】:

      猜你喜欢
      • 2016-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 2015-12-08
      • 1970-01-01
      • 2020-03-13
      相关资源
      最近更新 更多