2016-07-27 113 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.]]]) 

這不是默認如果工作你想沿另一個軸複製它。在這種情況下,您需要明確維度以確保正確的廣播。