2010-03-01 93 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