在多维数组上应用多维函数(Python,Numpy)

时间:2018-03-14 11:02:38

标签: python numpy apply dimensions

我有一个问题,如何有效地应用一个以n维数组的m维切片作为输入的函数。

例如,我有一个n维的形状数组(i,j,k,l)。在尺寸(j,l)上,我想应用函数,它给我一个形状矩阵(j,l)。生成的numpy数组应该再次具有形状(i,j,k,l)。

例如,我想应用以下规范化函数

def norm(arr2d):
   return arr2d - np.mean(arr2d) 

数组

arrnd = np.arange(2*3*4*5).reshape(2,3,4,5)                    # Shape is (2,3,4,5)
切片(j,l)上的

我想要实现的结果是通过(缓慢?)Python列表理解和移动轴得到的。

result = np.asarray([ [ f(arrnd[:,j,:,l]) for l in range(5) ] for j in range(3)])   # Shape is (3,5,2,4) 
result = np.moveaxis(np.moveaxis(result,2,0),2,3).shape                             # Shape is (2,3,4,5) again

有没有更好,更多" numpyic"实现这一目标的方法,没有任何涉及的循环?

我看了np.apply_along_axis()np.apply_over_axes(),但前者仅适用于1-d函数,后者只有在我的函数实现为ufunc时才有效。

我提供的例子只是一个玩具示例。该解决方案应该适用于任何python函数。

((如果规范化切片将是我的具体问题,我可以使用ufunc' s axes=(..)来循环使用python循环和moveaxis。)

0 个答案:

没有答案