2016-07-27 13 views
2

に沿って繰り返し/複製することによって、2Dアレイからの3次元アレイを作成します内のすべてのアレイの3Dアレイk × n × mを生成するものIは<code>n × m</code>配列、すなわち、あるとし、第一軸

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

とI新しい軸は等しくなります。つまり、同じ配列ですが、今は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 dim配列をn+1 dim配列に拡張する場合に有効です。実装は次のようになります -

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

お持ちの場合:

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

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

あなたは、重複配列を生成するために、リスト内包表記を使用することができます

次に(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.]]]) 

これがあれば、デフォルトでは動作しません。別の軸に沿ってそれを複製したいとします。その場合、正確な放送を保証するために、寸法を明示する必要があります。

関連する問題