2014-10-02 108 views
4

提供一维数组作为a的3D平铺:一个numpy的阵列

a=np.arange(8) 

我想它在3D方案,以便具有这样的形状(n1, len(a), n3)被再现。 有没有任何工作方式可以通过np.tile获取?这似乎微不足道,但尝试:

np.shape( np.tile(a, (n1,1,n3)) ) 

np.shape( np.tile(np.tile(a, (n1,1)), (1,1,n2)) ) 

我从来没有获得我所需要的,是所产生的形状(n1, 1, len(a)*n3)(1, n1, len(a)*n3)。 也许是我不理解tile作品...

回答

7

发生了什么事怎么是a正在取得一个1x1x8阵列应用于平铺之前。您需要将a设为1x8x1阵列,然后致电tile

作为the documentation for tile笔记:

如果A.ndim < dA被促进为d维通过预先 新的轴。因此,将形状(3,)阵列提升为(1,3)以进行2-D 复制或用于3-D复制的形状(1,1,3)。如果这不是 所需的行为,请在 调用此函数之前手动将A升级为d维。

让你后的结果最简单的方法是切片aNone(或相当于np.newaxis),使其正确的形状。

作为一个简单的例子:

import numpy as np 

a = np.arange(8) 
result = np.tile(a[None, :, None], (4, 1, 5)) 
print result.shape