2016-07-27 109 views
2

假设我有重复n × m阵列,即:通过复制从2D阵列创建3D阵列/沿着第一轴

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

我什么以生成3D阵列k × n × m,其中在所有阵列新轴相等,即:相同的阵列,但现在是3 × 3 × 3

array([[ 1., 2., 3.], 
     [ 4., 5., 6.], 
     [ 7., 8., 9.]], 

     [[ 1., 2., 3.], 
     [ 4., 5., 6.], 
     [ 7., 8., 9.]], 

     [[ 1., 2., 3.], 
     [ 4., 5., 6.], 
     [ 7., 8., 9.]]]) 

我该如何得到它?

回答

2

None/np.newaxis开头引入一个新坐标轴,并沿np.repeat沿其复制。这应该适用于将任何n暗淡阵列延伸到n+1暗淡阵列。实施将是 -

np.repeat(arr[None,...],k,axis=0) 

采样运行 -

In [143]: arr 
Out[143]: 
array([[ 1., 2., 3.], 
     [ 4., 5., 6.], 
     [ 7., 8., 9.]]) 

In [144]: np.repeat(arr[None,...],3,axis=0) 
Out[144]: 
array([[[ 1., 2., 3.], 
     [ 4., 5., 6.], 
     [ 7., 8., 9.]], 

     [[ 1., 2., 3.], 
     [ 4., 5., 6.], 
     [ 7., 8., 9.]], 

     [[ 1., 2., 3.], 
     [ 4., 5., 6.], 
     [ 7., 8., 9.]]]) 
0

如果您有:

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

您可以使用列表解析生成所述重复阵列:

b = [a for x in range(3)] 

然后(对于numpy):

c = array(b) 
0

一种可能性是使用默认的广播,以复制数组:

a = np.arange(1, 10).reshape(3,3) 
n = 3 
b = np.ones((n, 3, 3)) * a 

导致你想在阵列中:

array([[[ 1., 2., 3.], 
     [ 4., 5., 6.], 
     [ 7., 8., 9.]], 

     [[ 1., 2., 3.], 
     [ 4., 5., 6.], 
     [ 7., 8., 9.]], 

     [[ 1., 2., 3.], 
     [ 4., 5., 6.], 
     [ 7., 8., 9.]]]) 

这不是默认如果工作你想沿另一个轴复制它。在这种情况下,您需要明确维度以确保正确的广播。