提供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
如何运作......
答案 0 :(得分:7)
正在发生的事情是a
在应用平铺之前被制作为1x1x8阵列。您需要将a
设为1x8x1阵列,然后拨打tile
。
如the documentation for tile
所述:
如果
A.ndim < d
,A
通过前置提升为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