NumPy 中多轴的平均值

Posted

技术标签:

【中文标题】NumPy 中多轴的平均值【英文标题】:Mean over multiple axis in NumPy 【发布时间】:2016-02-06 17:43:12 【问题描述】:

我想以 Pythonic 方式编写下面的代码,在两个轴上应用平均值。最好的方法是什么?

import numpy as np

m = np.random.rand(30, 10, 10)  
m_mean = np.zeros((30, 1))    
for j in range(30):
    m_mean[j, 0] = m[j, :, :].mean()

【问题讨论】:

为什么m_mean 是一个二维数组? 为什么要创建第二个只有一行的 numpy 数组?为什么不只是一个简单的列表? NumPythonic 方式为m.mean(axis=(1,2)) 【参考方案1】:

如果你有足够新的 NumPy,你可以这样做

m_mean = m.mean(axis=(1, 2))

我相信这是在 1.7 中引入的,但我不确定。文档仅在 1.10 中进行了更新以反映这一点,但它比这更早。

如果您的 NumPy 太旧,您可以手动取平均值:

m_mean = m.sum(axis=2).sum(axis=1) / np.prod(m.shape[1:3])

这些都会产生一维结果。如果你真的想要那个额外的长度为 1 的轴,你可以做类似m_mean = m_mean[:, np.newaxis] 的事情来把额外的轴放在那里。

【讨论】:

用旧的numpy,你也可以只做m.mean(axis=2).mean(axis=1) @Rob:啊,你是对的。由于m.mean(axis=2) 步骤中的所有均值都在相同数量的元素上,m.mean(axis=2).mean(axis=1) 正确地赋予每个元素相同的权重。【参考方案2】:

您还可以使用numpy.mean() ufunc 并将输出数组作为参数传递给out=,如下所示:

np.mean(m, axis=(1, 2), out=m_mean)

【讨论】:

以上是关于NumPy 中多轴的平均值的主要内容,如果未能解决你的问题,请参考以下文章

计算 Numpy 矩阵中每一行的平均值

在numpy中获取3D数组的2D切片的平均值

numpy/python 中的加权平均值

如何将 .csv 文件中的数据转换为 NumPy 数组并使用统计数据来查找数据的平均值? [复制]

用于改变多个numpy数组的函数的行为变化的平均值

Python/NumPy 中计算均值的元素排列