在连续的2d切片上的Numpy矢量化函数

时间:2014-06-24 17:17:39

标签: python arrays numpy vectorization

我有一个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])

我该如何做到这一点?

1 个答案:

答案 0 :(得分:4)

我担心下面的内容是简洁性和性能之间的最佳折衷方案。不幸的是,apply_along_axis不占用多个轴。

new3dmat = np.array([func2dmat(slice) for slice in my3dmat])

在额外分配等方面并不理想,但除非.shape [0]相对于.size大,否则额外开销应该是最小的。