2016-12-31 19 views
2

は、私はこのような3次元NPアレイを持っている:繰り返しnumpyの配列

x= array([[[ 1., 2., 3.], 
    [ 4., 5., 6.], 
    [ 7., 8., 9.], 
    [ 10., 11., 12.]], 

    [[ 13., 14., 15.], 
    [ 16., 17., 18.], 
    [ 19., 20., 21.], 
    [ 22., 23., 24.]]]) 

私はこのように私の配列をn回(例えば3回)繰り返したい:私は次のように試してみました

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

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

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

    [[ 13., 14., 15.], 
    [ 16., 17., 18.], 
    [ 19., 20., 21.], 
    [ 22., 23., 24.]], 

    [[ 13., 14., 15.], 
    [ 16., 17., 18.], 
    [ 19., 20., 21.], 
    [ 22., 23., 24.]] 

    [[ 13., 14., 15.], 
    [ 16., 17., 18.], 
    [ 19., 20., 21.], 
    [ 22., 23., 24.]]]) 

これは:

xx=np.vstack([x]*3) 
print xx.reshape(6,4,3) 


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

    [[ 13., 14., 15.], 
    [ 16., 17., 18.], 
    [ 19., 20., 21.], 
    [ 22., 23., 24.]], 

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

    [[ 13., 14., 15.], 
    [ 16., 17., 18.], 
    [ 19., 20., 21.], 
    [ 22., 23., 24.]], 

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

    [[ 13., 14., 15.], 
    [ 16., 17., 18.], 
    [ 19., 20., 21.], 
    [ 22., 23., 24.]]]) 

私が望むようにどのように得ることができますか、これを行う簡単な方法があります。事前におかげさまでありがとうございます。

答えて

2

あなたはaxis = 0np.repeatを使用することができます。

np.repeat(x, [3, 3], axis = 0) # or more generally np.repeat(x, [n] * len(x), axis = 0) 
           # here n is the repeat times 
Out[514]: 
array([[[ 1., 2., 3.], 
     [ 4., 5., 6.], 
     [ 7., 8., 9.], 
     [ 10., 11., 12.]], 

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

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

     [[ 13., 14., 15.], 
     [ 16., 17., 18.], 
     [ 19., 20., 21.], 
     [ 22., 23., 24.]], 

     [[ 13., 14., 15.], 
     [ 16., 17., 18.], 
     [ 19., 20., 21.], 
     [ 22., 23., 24.]], 

     [[ 13., 14., 15.], 
     [ 16., 17., 18.], 
     [ 19., 20., 21.], 
     [ 22., 23., 24.]]]) 

別のオプションとして、インデックス、それを次のようになります。

x[[0,0,0,1,1,1]] 

またはプログラム:

x[[i for i in range(len(x)) for j in range(3)]] 
Out[518]: 
array([[[ 1., 2., 3.], 
     [ 4., 5., 6.], 
     [ 7., 8., 9.], 
     [ 10., 11., 12.]], 

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

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

     [[ 13., 14., 15.], 
     [ 16., 17., 18.], 
     [ 19., 20., 21.], 
     [ 22., 23., 24.]], 

     [[ 13., 14., 15.], 
     [ 16., 17., 18.], 
     [ 19., 20., 21.], 
     [ 22., 23., 24.]], 

     [[ 13., 14., 15.], 
     [ 16., 17., 18.], 
     [ 19., 20., 21.], 
     [ 22., 23., 24.]]]) 
+0

(2,4,3)から始めると、再構成後に再構成する必要はありません。 – hpaulj

+0

@hpauljコメントありがとうございます。 '[3,3]'と 'axis = 0'に沿って変形しないで動作します。 – Psidom

4

ビットの後試験のエラー:私はそれを行う方法を見つけました:

np.tile(x.reshape(2,12), [1,3]).reshape(6,4,3)