一个numpy数组的3D平铺

6

如果提供了一个一维数组 a:

a=np.arange(8)

我希望它能够在三维方案中再现,以获得这样的形状(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个回答

9
正在发生的是在应用平铺之前,将a制成了一个1x1x8数组。您需要将a制成一个1x8x1数组,然后调用tile
正如tile文档中所述:
如果 A.ndim < d,则通过添加新轴将A升级为d维。 因此,形状为(3,)的数组在2-D复制时升级为(1,3),在3-D复制时升级为形状为(1,1,3)。 如果这不是所需的行为,请在调用此函数之前手动将A提升到d维度。
获得您想要的结果的最简单方法是使用None(或等效地,np.newaxis)切片a以使其具有正确的形状。
以下是一个快速示例:
import numpy as np

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接