我有一个3D numpy数组。我想通过沿着轴在连续的2d切片上执行函数并将得到的切片堆叠在一起来形成新的3d数组。很明显,有很多方法可以做到这一点;我想以最简洁的方式做到这一点。我认为这对于numpy.vectorize
是可能的,但这似乎产生了一个迭代我的数组中每个值的函数,而不是通过沿第一个轴移动的2D切片。
基本上,我希望代码看起来像这样:
new3dmat = np.vectorize(func2dmat)(my3dmat)
并完成与此相同的事情:
new3dmat = np.empty_like(my3dmat)
for i in range(my3dmat.shape[0]):
new3dmat[i] = func2dmat(my3dmat[i])
我该如何做到这一点?
答案 0 :(得分:4)
我担心下面的内容是简洁性和性能之间的最佳折衷方案。不幸的是,apply_along_axis不占用多个轴。
new3dmat = np.array([func2dmat(slice) for slice in my3dmat])
在额外分配等方面并不理想,但除非.shape [0]相对于.size大,否则额外开销应该是最小的。