猿问

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

我有一个 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 的情况下简洁地执行此操作?


慕娘9325324
浏览 93回答 1
1回答

一只名叫tom的猫

使用输入数组:print(arr1) array([[&nbsp;1,&nbsp;&nbsp;2], &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;2,&nbsp;&nbsp;2], &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;5,&nbsp;&nbsp;3], &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;9,&nbsp;-1], &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;6,&nbsp;&nbsp;3]])您可以单独检查每个列的条件(请注意,链式比较在 NumPy 中不起作用)。然后对两个条件进行按位与并广播到数组的形状:x&nbsp;=&nbsp;arr1[:,0]&nbsp; y&nbsp;=&nbsp;arr1[:,1]&nbsp; c1&nbsp;=&nbsp;(x>0)&(x<4) c2&nbsp;=&nbsp;(y>0)&(y<7) np.broadcast_to((c1&c2)[:,None],&nbsp;arr1.shape) array([[&nbsp;True,&nbsp;&nbsp;True], &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;True,&nbsp;&nbsp;True], &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[False,&nbsp;False], &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[False,&nbsp;False], &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[False,&nbsp;False]])
随时随地看视频慕课网APP

相关分类

Python
我要回答