2016-12-31 80 views
2

我有3D 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

您可以使用np.repeataxis = 0

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感谢您的评论。它可以沿着'axis = 0'与'[3,3]'一起工作,而无需重新塑形。 – Psidom

4

后位的审判和错误我已经找到了一种方法来做到这一点:

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