我有一個 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])但它告訴我“具有多個元素的數組的真值是不明確的?!?nbsp;有沒有一種方法可以在不使用循環或 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]])
添加回答
舉報
0/150
提交
取消