2010-03-01 91 views
23

當然,必須有辦法做到這一點......我無法解決這個問題。我有一個(9,4)數組,我想沿着第三軸重複4096次...所以它變成了簡單的(9,4,4096),每個數值都來自9,4數組。簡單地沿新軸線重複4096次。numpy:將數組沿着新軸延伸?

如果我半信半疑的3D圖是有道理的(對角線爲Z軸)

4| /off to 4096 
3|/
2|/
1|/_ _ _ _ _ _ _ _ _ 
    1 2 3 4 5 6 7 8 9 

乾杯

編輯:只是爲了澄清,這裏強調的是(9,4)陣列對新軸的4096行中的每一行重複執行。設想一個截面 - 每個原始(9,4)陣列是4096長方體之一。

+0

'np.tile'是另一種選擇。請參閱[此問題]的答案(http://stackoverflow.com/q/1721802/2623899)。 – dbliss 2013-11-27 22:21:26

+0

你也繪製了4乘9矩陣的圖。 :) – 2015-05-17 18:32:06

回答

22

這裏有一種方法:

import scipy 
X = scipy.rand(9,4,1) 
Y = X.repeat(4096,2) 

如果X就交給你了,因爲只有(9,4),然後

import scipy 
X = scipy.rand(9,4) 
Y = X.reshape(9,4,1).repeat(4096,2) 
+1

再次感謝史蒂夫,感到困惑,因爲我沒有意識到在使用重複方法之前必須重新整形數組 - 它一直告訴我我試圖使用未定義的軸。儘管現在有意義。 – 2010-03-02 10:33:37

9

您也可以依靠廣播規則重複填充重新排列的陣列:

import numpy 
X = numpy.random.rand(9,4) 
Y = numpy.resize(X,(4096,9,4)) 

如果您不喜歡用這種方式訂購的軸,則可以轉置:

Z = Y.transpose(1,2,0) 
5

問題是超級老了,但這裏的另一種選擇呢:

import numpy as np 
X = np.random.rand(9,4) 
Y = np.dstack([X] * 4096) 
+0

而不是'[X for i in range(4096)]''你可以做'[X] * 4096'。 – blubberdiblub 2016-04-29 08:36:10

+0

良好的通話,編輯我的答案。 – DavidS 2016-05-02 17:31:17