计算多轴均值

时间:2019-06-17 20:57:32

标签: python python-3.x numpy

假设

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,但是我已经看到许多地方将轴作为元组传递。我不知道在这种情况下如何计算输出尺寸以及沿哪个轴或轴的组合进行计算。我可以请问一下吗?

1 个答案:

答案 0 :(得分:1)

我通常不建议使用随机整数序列来确定发生了什么,而是通常建议生成一种测试模式。

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])