首页 > 解决方案 > 跨多个轴计算平均值

问题描述

认为

inp = np.random.randint(1,500,size=(1, 2, 5, 5))

输出是:

array([[[[ 58, 223, 150, 287,  56],
         [ 59,  19, 436, 441, 299],
         [194,  79, 133,  19, 113],
         [242, 497, 494,  54,   6],
         [ 57, 382, 123, 114,  40]],

        [[170, 482, 464,  78, 429],
         [ 97, 445, 129, 319, 181],
         [370, 413, 304, 177, 215],
         [  4, 279, 366,  66,  65],
         [260, 375, 492, 282, 277]]]])

现在如果我这样做

np.sum(inp,axis=(2,3))

我明白了

array([[4575, 6739]])

我知道列和行分别是轴 0 和轴 1,但我看到很多地方轴作为元组传递。我不知道在这种情况下如何计算输出尺寸以及它沿着哪些轴或轴组合发生。我可以对此有所了解吗?

标签: pythonpython-3.xnumpy

解决方案


我通常建议生成一个用于测试的模式,而不是尝试使用一系列随机整数来弄清楚发生了什么。

shp = (1, 2, 3, 4)

a = np.arange(np.prod(shp)).reshape(shp)

a
Out[3]: 
array([[[[ 0,  1,  2,  3],
         [ 4,  5,  6,  7],
         [ 8,  9, 10, 11]],

        [[12, 13, 14, 15],
         [16, 17, 18, 19],
         [20, 21, 22, 23]]]])

np.mean(a, axis=(0,1))
Out[4]: 
array([[ 6.,  7.,  8.,  9.],
       [10., 11., 12., 13.],
       [14., 15., 16., 17.]])

np.mean(a, axis=(1,2))
Out[5]: array([[10., 11., 12., 13.]])

np.mean(a, axis=(2,3))
Out[6]: array([[ 5.5, 17.5]])

从那里您可以删除可能会混淆您所期望的轴并重新检查

a = a.squeeze()

np.mean(a, axis=(0,1))
Out[8]: array([10., 11., 12., 13.])

np.mean(a, axis=(1,2))
Out[9]: array([ 5.5, 17.5])

推荐阅读