我有一个3D numpy数组。我想通过沿着一个轴在连续的2D切片上执行一个函数来形成一个新的3D数组,并且将结果切片堆叠在一起。显然有很多方法可以做到这一点;我想尽可能以最简洁的方式做到这一点。我认为这将可能与numpy.vectorize
,但这似乎产生一个函数,迭代我的数组中的每个值,而不是通过沿第一轴移动的2D切片。连续2D切片上的Numpy矢量化函数
基本上,我想要的代码看起来是这样的:
new3dmat = np.vectorize(func2dmat)(my3dmat)
,并完成同样的事情,这样的:
new3dmat = np.empty_like(my3dmat)
for i in range(my3dmat.shape[0]):
new3dmat[i] = func2dmat(my3dmat[i])
我怎样才能做到这一点?
你不能重写你的'func2dmat'来操作整个3D阵列吗? YMMV,但tHat通常是这种矢量化的最佳途径。 – Jaime
我可以这样做,但循环解决方案更可取。我希望能够对一个复合数据结构(3d矩阵)进行简洁的操作,并使用一个可以对其成分(二维矩阵)进行操作的函数 - 而且这个函数不需要知道这些成分来自哪个大结构。这样我只需要一个函数,而不是每个包含2d矩阵的可能结构的特殊函数。 –
您需要一个GUFUNC,例如['np.linalg.det'](http://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.det.html)......这个惯例是让你的函数在每个2D上运行数组放在输入的最后2个维上。如果你能写出快速的矢量化代码,那么让它在其他轴上工作只是明智地使用['np.rollaxis']的问题(http://docs.scipy.org/doc/numpy/reference/generated/ numpy.rollaxis.html)等。如果你想充分利用numpy,Python循环解决方案几乎不可取。 – Jaime