簡體   English   中英

根據索引中的值重復二維數組索引元組

[英]Repeat 2D array index tuples according to value in index

我有一個 numpy 二維矩陣,每個單元格可能包含一個 integer 值。 例如:

[[0, 1, 0, 2, 3], 
 [2, 0, 1, 1, 1]]

我想制作一個包含每個 (x,y) 單元格乘以它的值的列表,例如,我想要上面矩陣的下面列表:

[(1,0) , (3,0) , (3,0) , (4,0) , (4,0) , (4,0) , (0,1) , (0,1) , (2,1) , (3,1) , (4,1)]

換句話說, [0,1]的值是1 ,所以這個 x,y append 在列表“1”時間。

我寫了這段代碼。 但它真的很慢。 如何使用優化的方法做到這一點?

def page_to_std(data):
        h, w = data.shape
        res = []

        for y in range(0, h):
            for x in range(0, w):
                   amount = int(data[y][x])
                   for i in range(0, amount):
                      res.append((x,y))
        
        return res

好像你在那里混合了兩個軸。 假設是這樣,您可以使用np.ndindex生成索引元組,並使用np.repeat根據展平的輸入數組重復生成的元組數組:

coo = np.fromiter(np.ndindex(a.shape), dtype='i,i')
np.repeat(coo, a.ravel()).tolist()
# [(0, 1), (0, 3), (0, 3), (0, 4), (0, 4), (0, 4), (1, 0), (1, 0), (1, 2), (1, 3), (1, 4)]

暫無
暫無

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

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