首页 > 解决方案 > Python中是否有等效于R的应用函数?

问题描述

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

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

z <- array(1, dim = 2:4)
apply(z, 1, sum)

结果是:

[1] 12 12

当使用两个边距值调用时:

apply(z, c(1,2), sum)

结果是:

     [,1] [,2] [,3]
[1,]    4    4    4
[2,]    4    4    4

我发现sumnumpy中的函数是可以使用的,但是方式不一样:

例如:

import numpy as np

xx= np.ones((2,3,4))
np.sum(xx,axis=(1,2))

结果是:

array([12., 12.])

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

标签: pythonrnumpymultidimensional-array

解决方案


NumPy 中的等价物是:

xx.sum(axis=2)

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

array([[4., 4., 4.],
       [4., 4., 4.]])

也许您的 R 代码的更直译是:

np.apply_over_axes(np.sum, xx, 2)

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


推荐阅读