为何np.mean()中axis=0是按列求均值而非按行?
NumPy中axis参数的理解困惑
先看示例数组:
import numpy as np arr = np.array([[1,2,3], [1,2,3]])
执行后输出:
>>> arr array([[1, 2, 3], [1, 2, 3]]) >>> arr.shape (2, 3)
由于arr.shape[0]为2,代表数组的行数,我原本预期np.mean(arr, axis=0)会计算每行的均值,但实际它是按列计算均值:
>>> np.mean(arr, axis=0) array([1., 2., 3.]) # 每列的均值 >>> np.mean(arr, axis=1) array([2., 2.]) # 每行的均值
NumPy文档中对axis参数的描述为:
"Axis or axes along which the means are computed."
我最初认为axis=0会按行计算均值并返回每行的均值,因为arr.shape[0]对应行数。我使用的是Python 3.10.0和NumPy 2.2.3版本。
我是不是误解了文档?能否帮忙澄清这个约定?为何axis=0是合并行而非列?
澄清NumPy的axis约定
你并没有误解文档的字面表述,但需要抓住NumPy中axis参数的核心逻辑:axis指定的是要「压缩/合并」的维度,而非要保留的维度。
- 对于二维数组,
axis=0对应shape的第一个元素(行维度)。当指定axis=0计算均值时,NumPy会沿着行的方向聚合数据——也就是把每一列的所有行元素汇总求平均,最终消除行维度,得到列维度的结果(对应示例中3个元素的输出)。 axis=1对应shape的第二个元素(列维度),沿着列的方向聚合数据,把每一行的所有列元素汇总求平均,消除列维度,得到行维度的结果(示例中2个元素的输出)。
文档里的"along which the means are computed"可以理解为:沿着该轴的方向遍历,将该轴上的所有元素进行聚合计算,最终移除这个轴。
换个直观的角度:二维数组中,axis=0是垂直方向(上下)的聚合,axis=1是水平方向(左右)的聚合。
内容的提问来源于stack exchange,提问作者sadra
相关产品推荐
相关产品推荐

