为了账号安全,请及时绑定邮箱和手机立即绑定

Numpy:我如何应用矢量蒙版?

Numpy:我如何应用矢量蒙版?

慕娘9325324 2023-02-22 19:18:33
我有一个 numpy 数组,它是一个向量列表,比如arr1 = [ [ 1, 2 ], [ 2, 2 ], [ 5, 3 ], [ 9, -1 ], [ 6, 3 ], ... ]对应于 x,y 值对。我想使用 x 和 y 分量的标准设置掩码,例如 0 < x < 4 和 0 < y < 7,这样上面的掩码看起来像:[ [ True, True ], [ True, True ], [ False, False ], [ False, False ], [ False, False ], ... ]换句话说,对于数组中的每个向量,我希望掩码的两个分量都具有相同的真值,并且只有在True同时满足 x 和 y 的条件时才返回。我试过类似的东西:masked = numpy.ma.array(arr1, mask= [0<arr1[:,0]<4 & 0<arr1[:,1]<7, 0<arr1[:,0]<4 & 0<arr1[:,1]<7])但它告诉我“具有多个元素的数组的真值是不明确的。” 有没有一种方法可以在不使用循环或 if else 的情况下简洁地执行此操作?
查看完整描述

1 回答

?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

使用输入数组:

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

您可以单独检查每个列的条件(请注意,链式比较在 NumPy 中不起作用)。然后对两个条件进行按位与并广播到数组的形状:

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


查看完整回答
反对 回复 2023-02-22
  • 1 回答
  • 0 关注
  • 67 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号