3D平铺的numpy阵列

时间:2014-10-02 17:45:54

标签: python arrays numpy

提供1D数组为a

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如何运作......

1 个答案:

答案 0 :(得分:7)

正在发生的事情是a在应用平铺之前被制作为1x1x8阵列。您需要将a设为1x8x1阵列,然后拨打tile

the documentation for tile所述:

  

如果A.ndim < dA通过前置提升为d维   新轴。因此,对于2-D,形状(3,)阵列被提升为(1,3)   用于3-D复制的复制或形状(1,1,3)。如果不是这样的话   所需的行为,之前手动将A提升为d维度   调用这个函数。

获得结果的最简单方法是使用a(或等效地,None)对np.newaxis进行切片,以使其形状正确。

作为一个简单的例子:

import numpy as np

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