簡體   English   中英

Python numpy boolean 屏蔽 2d np 陣列

[英]Python numpy boolean masking on 2d np array

我有兩個 2d numpy arrays X 和 Y 看起來像:

X = np.array([[1,2,3,4],[4,5,6,7],[4,3,2,1],[7,8,9,0]]
            )
Y = np.array([[0,0,0],[1,2,4],[1,1,1], [0,0,0]]
            )

我想刪除 Y 中所有為 0 的 arrays(即 np.zeros),以及 X 數組中同一索引處的所有相應 arrays。

所以,對於這兩個 X,Y arrays,我想回復:

X = np.array([[4,5,6,7],[4,3,2,1]]
            )
Y = np.array([[1,2,4],[1,1,1]]
            )

X 和 Y 將始終具有相同的長度,並且 X 和 Y 將始終是矩形(即 X 中的每個數組將具有相同的長度,並且 Y 中的每個數組將具有相同的長度)。

我嘗試使用循環,但這對於大 X 和 Y 似乎沒有那么有效

創建一個 boolean 數組,指示每行的任何非零元素,然后使用boolean 數組索引進行過濾:

any_zero = (Y != 0).any(1)

X[any_zero]
#[[4 5 6 7]
# [4 3 2 1]]

Y[any_zero]    
#[[1 2 4]
# [1 1 1]]

首先,您需要獲取 Y 的哪些行全為零的掩碼。 這可以使用 any 方法並將軸設置為 1 來完成

Y.any(axis = 1)

將返回array([False, True, True, False])你可以使用這個數組來獲取你想要從 X 和 Y 返回的行

X[Y.any(axis = 1)]

將返回

array([[4, 5, 6, 7],
       [4, 3, 2, 1]])

Y[Y.any(axis = 1)]

將返回

array([[1, 2, 4],
       [1, 1, 1]])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM