连续二维切片上的 Numpy 矢量化函数

Sea*_*sey 6 python arrays numpy vectorization

我有一个 3D numpy 数组。我想通过在沿轴的连续 2d 切片上执行函数并将生成的切片堆叠在一起来形成一个新的 3d 数组。显然,有很多方法可以做到这一点;我想以最简洁的方式做到这一点。我认为这是可能的numpy.vectorize,但这似乎产生了一个迭代数组中每个值的函数,而不是沿第一个轴移动的二维切片。

基本上,我想要看起来像这样的代码:

new3dmat = np.vectorize(func2dmat)(my3dmat)
Run Code Online (Sandbox Code Playgroud)

并完成与此相同的事情:

new3dmat = np.empty_like(my3dmat)
for i in range(my3dmat.shape[0]):
  new3dmat[i] = func2dmat(my3dmat[i])
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

Eel*_*orn 5

恐怕像下面这样的东西是简洁性和性能之间的最佳折衷。不幸的是,apply_along_axis 不采用多个轴。

new3dmat = np.array([func2dmat(slice) for slice in my3dmat])
Run Code Online (Sandbox Code Playgroud)

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