簡體   English   中英

通過像np.in1d這樣的索引數組為2D陣列屏蔽2D Numpy數組

[英]Mask a 2D Numpy Array by array of indexes like np.in1d for 2d arrays

    np.array(
[[0,13,0,2,0,0,0,0,0,0,0,0],
 [0,0,15,0,9,0,0,0,0,0,0,0],
 [0,0,0,0,0,18,0,0,0,0,0,0],
 [0,0,0,0,27,0,20,0,0,0,0,0],
 [0,0,0,0,0,20,0,10,0,0,0,0],
 [0,0,0,0,0,0,0,0,8,0,0,0],
 [0,0,0,0,0,0,0,14,0,14,0,0],
 [0,0,0,0,0,0,0,0,12,0,25,0],
 [0,0,0,0,0,0,0,0,0,0,0,11],
 [0,0,0,0,0,0,0,0,0,0,15,0],
 [0,0,0,0,0,0,0,0,0,0,0,7],
 [0,0,0,0,0,0,0,0,0,0,0,0]])

我試圖找到如何采取像上面的numpy數組然后在一個高性能操作掩碼它與我想要歸零的元素的索引

[0,1] [1,4] [4,7] [7,8] [8,11]

所以我留下的是

np.array(
[[0,0,0,2,0,0,0,0,0,0,0,0],
 [0,0,15,0,0,0,0,0,0,0,0,0],
 [0,0,0,0,0,18,0,0,0,0,0,0],
 [0,0,0,0,27,0,20,0,0,0,0,0],
 [0,0,0,0,0,20,0,0,0,0,0,0],
 [0,0,0,0,0,0,0,0,8,0,0,0],
 [0,0,0,0,0,0,0,14,0,14,0,0],
 [0,0,0,0,0,0,0,0,0,0,25,0],
 [0,0,0,0,0,0,0,0,0,0,0,0],
 [0,0,0,0,0,0,0,0,0,0,15,0],
 [0,0,0,0,0,0,0,0,0,0,0,7],
 [0,0,0,0,0,0,0,0,0,0,0,0]])

像np.in1d的功能,但對於2D陣列? 我可以迭代每個元素,但數組可以真正大量,因此矢量單個操作掩碼將是最好的。 可能嗎? 如果這是一個愚蠢的問題,我相信我會被告知!

您可以通過以下方式直接訪問這些索引

indexes = [[0,1], [1,4], [4,7], [7,8], [8,11]]
indexes =zip(*indexes)
>>[(0, 1, 4, 7, 8), (1, 4, 7, 8, 11)]
a[indexes[0], indexes[1]]=0
>>
[[ 0  0  0  2  0  0  0  0  0  0  0  0]
 [ 0  0 15  0  0  0  0  0  0  0  0  0]
 [ 0  0  0  0  0 18  0  0  0  0  0  0]
 [ 0  0  0  0 27  0 20  0  0  0  0  0]
 [ 0  0  0  0  0 20  0  0  0  0  0  0]
 [ 0  0  0  0  0  0  0  0  8  0  0  0]
 [ 0  0  0  0  0  0  0 14  0 14  0  0]
 [ 0  0  0  0  0  0  0  0  0  0 25  0]
 [ 0  0  0  0  0  0  0  0  0  0  0  0]
 [ 0  0  0  0  0  0  0  0  0  0 15  0]
 [ 0  0  0  0  0  0  0  0  0  0  0  7]
 [ 0  0  0  0  0  0  0  0  0  0  0  0]]

我想你想找到這個

a = np.array(
[[0,13,0,2,0,0,0,0,0,0,0,0],
 [0,0,15,0,9,0,0,0,0,0,0,0],
 [0,0,0,0,0,18,0,0,0,0,0,0],
 [0,0,0,0,27,0,20,0,0,0,0,0],
 [0,0,0,0,0,20,0,10,0,0,0,0],
 [0,0,0,0,0,0,0,0,8,0,0,0],
 [0,0,0,0,0,0,0,14,0,14,0,0],
 [0,0,0,0,0,0,0,0,12,0,25,0],
 [0,0,0,0,0,0,0,0,0,0,0,11],
 [0,0,0,0,0,0,0,0,0,0,15,0],
 [0,0,0,0,0,0,0,0,0,0,0,7],
 [0,0,0,0,0,0,0,0,0,0,0,0]])

b = np.array([[0,1],[1,4],[4,7],[7,8],[8,11]])

# get x coordinates in an array
c1 = b[:,0]
# get y coordinates in an array
c2 = b[:,1]
a[c1[:,None],c2] = 0

a 
array([[ 0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0],
       [ 0,  0, 15,  0,  0,  0,  0,  0,  0,  0,  0,  0],
       [ 0,  0,  0,  0,  0, 18,  0,  0,  0,  0,  0,  0],
       [ 0,  0,  0,  0, 27,  0, 20,  0,  0,  0,  0,  0],
       [ 0,  0,  0,  0,  0, 20,  0,  0,  0,  0,  0,  0],
       [ 0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0],
       [ 0,  0,  0,  0,  0,  0,  0, 14,  0, 14,  0,  0],
       [ 0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 25,  0],
       [ 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
       [ 0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15,  0],
       [ 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  7],
       [ 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0]])

暫無
暫無

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

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