将函数应用于3D numpy数组的每个2D切片的有效方法

Yos*_*ian 14 python arrays numpy

我想应用一个将2D数组(并返回相同形状之一)的函数应用于3D数组的每个2D切片.这样做的有效方法是什么?numpy.fromiter返回一维数组,numpy.fromfunction需要单独应用于每个坐标.

目前我在做

foo = np.array([func(arg, bar2D) for bar2D in bar3D])
Run Code Online (Sandbox Code Playgroud)

这给了我想要的东西,但列表理解非常慢.此外,func是具有特定边界条件的一维导数.numpy.gradient似乎只有N的数组维度的ND衍生物,但也许有另一个例程可以为我做整件事?

编辑:列表理解有效,但我正在寻找一种更快的方法.bar3D可以很大,最多(500,500,1000).numpy我发现的将函数应用于数组的所有例程似乎都假设函数或数组都是1D.

ato*_*3ls -5

假设你有一个数组,a:

>>> a=np.random.random((4,3,2))

array([[[ 0.27252091,  0.78545835],
        [ 0.83604934,  0.48509821],
        [ 0.77828735,  0.26630055]],

       [[ 0.98623474,  0.29839813],
        [ 0.15893604,  0.61870988],
        [ 0.62281607,  0.27193647]],

       [[ 0.47976331,  0.2471835 ],
        [ 0.77323041,  0.30137068],
        [ 0.52906156,  0.53950597]],

       [[ 0.59207654,  0.86355457],
        [ 0.50250812,  0.75688653],
        [ 0.91046136,  0.5785383 ]]])
Run Code Online (Sandbox Code Playgroud)

您可以像这样访问 2D 切片:

>>> for x in range(a.shape[0]):
        print a[x,:,:]

>>> for x in range(a.shape[1]):
        print a[:,x,:]

>>> for x in range(a.shape[2]):
        print a[:,:,x]
Run Code Online (Sandbox Code Playgroud)