Python 中是否有等效于 R 的 apply 函数?

Ema*_*ail 3 python numpy r multidimensional-array

我试图找到与 Rapply函数等效但具有多维数组的 Python 。

例如,当调用以下代码时:

z <- array(1, dim = 2:4)
apply(z, 1, sum)
Run Code Online (Sandbox Code Playgroud)

结果是:

[1] 12 12
Run Code Online (Sandbox Code Playgroud)

当使用两个保证金值调用时:

apply(z, c(1,2), sum)
Run Code Online (Sandbox Code Playgroud)

结果是:

     [,1] [,2] [,3]
[1,]    4    4    4
[2,]    4    4    4
Run Code Online (Sandbox Code Playgroud)

我发现sum可以使用 numpy中的函数,但不是以相同的一致方式:

例如:

import numpy as np

xx= np.ones((2,3,4))
np.sum(xx,axis=(1,2))
Run Code Online (Sandbox Code Playgroud)

结果是:

array([12., 12.])
Run Code Online (Sandbox Code Playgroud)

但是apply在处理margin=c(1,2). 有人可以帮忙吗?

Joh*_*nck 6

NumPy 中的等价物是:

xx.sum(axis=2)
Run Code Online (Sandbox Code Playgroud)

也就是说,您正在对轴 2(最后一个维度)求和,其长度为 4,将其他两个维度 (2,3) 作为结果的形状:

array([[4., 4., 4.],
       [4., 4., 4.]])
Run Code Online (Sandbox Code Playgroud)

也许你的 R 代码更直接的翻译是:

np.apply_over_axes(np.sum, xx, 2)
Run Code Online (Sandbox Code Playgroud)

这给出了类似的结果,但转置了。然而,这可能会更慢,并且不是惯用的,除非您正在执行的实际操作比 sum 更复杂。