首页 > 解决方案 > 如何从 n 个不同的二维数组中取数组值的平均值?Python

问题描述

我有一个名为“all_data”的数组,如下所示:

array([[[102, 107, 111],
        [101, 106, 110],
        [100, 105, 109],
        ...,
        [221, 166,  99],
        [221, 166,  99],
        [221, 166,  99]],

       [[ 95, 100, 104],
        [ 98, 103, 107],
        [102, 107, 111],
        ...,
        [219, 165,  95],
        [218, 164,  94],
        [218, 164,  94]]])

我的目标是取同一索引的每个列值的平均值。例如,由于这个较大的数组有 2 个二维数组(尽管我的数据最多可以有 200 个需要平均的二维数组),平均的最终结果将是 1 个二维数组,第一个子列表是 [98.5, 103.5, 107.5]

当我尝试使用 numpy 并执行 all_data.mean(axis=2) 时,我得到一个看起来像这样的数组:

array([[106.66666667, 105.66666667, 104.66666667, ..., 162.        ,
        162.        , 162.        ],
       [ 99.66666667, 102.66666667, 106.66666667, ..., 159.66666667,
        158.66666667, 158.66666667]])

我不确定问题是什么,因为我认为它应该平均每个子列表的列值,但是发生了一些不同的事情。

任何帮助,将不胜感激

标签: pythonarrayslistnumpyaverage

解决方案


解决方法是设置axis=0。

all_data.mean(axis=0)

numpy 如何处理轴是通过折叠该轴。轴号是到达该轴的顺序。对于二维数组,我们有这样的东西:

arr = [[x,x,x], [x,x,x]] = [[x,x,x],
                            [x,x,x]]
  • 当轴 0 折叠时,我们得到这个形状: [x, x, x]
  • 当轴 1 折叠时,我们得到这个形状: [x, x]

对于更大的多维数组,同样的事情也适用,只是更难可视化。考虑折叠的另一种方法是通过将其设置为 1 来删除该维度。为了更清楚,这里是 3D 示例:

arr = [[[x, x, x],
        [x, x, x],
        [x, x, x],
        [x, x, x]],

       [[x, x, x],
        [x, x, x],
        [x, x, x],
        [x, x, x]]]

arr,作为 3d 矩阵,尺寸为 2x4x3

沿轴 0 折叠,我们得到一个 1x4x3 --> 4x3 的形状:

[[x, x, x],
 [x, x, x],
 [x, x, x],
 [x, x, x]]

沿轴 1 折叠,我们得到一个 2x1x3 --> 2x3 的形状:

[[x, x, x],
 [x, x, x]]

沿轴 2 折叠,我们得到一个 2x4x1 --> 2x4 的形状:

[[x, x, x, x],
 [x, x, x, x]]

推荐阅读