3D平铺的numpy阵列

glu*_*uke 5 python arrays numpy

提供一维数组为a:

a=np.arange(8)
Run Code Online (Sandbox Code Playgroud)

我希望它以3D方案再现,以便具有这样的形状(n1, len(a), n3).是否有任何工作方式来获得这个np.tile?这似乎微不足道,但尝试:

np.shape(  np.tile(a, (n1,1,n3))  )
Run Code Online (Sandbox Code Playgroud)

要么

np.shape(  np.tile( np.tile(a, (n1,1)), (1,1,n2) )  )
Run Code Online (Sandbox Code Playgroud)

我从来没有得到我需要的东西,是由此产生的形状(n1, 1, len(a)*n3)或(1, n1, len(a)*n3).也许是我不理解如何tile工作......

Joe*_*ton 8

发生的事情是a在应用平铺之前制作1x1x8阵列.你需要制作a一个1x8x1阵列,然后再打电话tile.

作为笔记的文档tile:

如果A.ndim < d,A通过预先添加新轴来提升为d维.因此,形状(3)阵列被提升为(1,3)用于2-D复制,或形状(1,1,3)用于3-D复制.如果这不是所需的行为,请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
Run Code Online (Sandbox Code Playgroud)