2016-09-27 18 views
1

我有一個numpy的陣列說複製元件

a = array([[1, 2, 3], 
      [4, 5, 6], 
      [7, 8, 9]]) 

我具有相同的尺寸的陣列 '複製',其中複製[I,J](> = 0)表示多少次[我應該沿着這一行重複[i] [j]。顯然,複製數組遵循np.sum(複製[i])對所有i具有相同值的不變量。 例如,如果

replication = array([[1, 2, 1], 
        [1, 1, 2], 
        [2, 1, 1]]) 

然後複製後的最終數組是:

new_a = array([[1, 2, 2, 3], 
      [4, 5, 6, 6], 
      [7, 7, 8, 9]]) 

目前,我這樣做是爲了創造new_a:

##allocate new_a 
h = a.shape[0] 
w = a.shape[1] 
for row in range(h): 
     ll = [[a[row][j]]*replicate[row][j] for j in range(w)] 
     new_a[row] = np.array([item for sublist in ll for item in sublist]) 

然而,這似乎是因爲涉及到使用列表太慢。我可以在沒有使用Python列表的情況下完全使用numpy嗎?

回答

3

您可以拼合出你replication陣列,然後使用a.repeat()方法:

import numpy as np 

a = array([[1, 2, 3], 
      [4, 5, 6], 
      [7, 8, 9]]) 

replication = array([[1, 2, 1], 
        [1, 1, 2], 
        [2, 1, 1]]) 

new_a = a.repeat(replication.ravel()).reshape(a.shape[0], -1) 

print(repr(new_a)) 
# array([[1, 2, 2, 3], 
#  [4, 5, 6, 6], 
#  [7, 7, 8, 9]]) 
+0

謝謝,只使用numpy的是量值的次序快於列表的接口。 –