Python 计算多轴上的平均值

Python 计算多轴上的平均值,python,python-3.x,numpy,Python,Python 3.x,Numpy,假设 inp=np.random.randint(1500,大小=(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

假设

inp=np.random.randint(1500,大小=(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,轴=(2,3))
我明白了


我知道列和行分别是轴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])

这等于np.sum(np.sum(inp,2,axis=2)sum一次减少一个维度。结果是一个(1,2)数组,原始(1,2,5,5)的前两个维度。在这些sum/mean/max类型的操作中,指定的轴“消失”。
np.sum(inp,axis=(2,3),keepdims=True)。shape
也可以帮助可视化操作。在你的例子中,初始尺寸1维可能会令人困惑。@hpaulj我得到了你的第一条评论,这是有意义的:无论你指定哪个轴,这些轴都会“消失”,剩下的轴是结果的形状,但剩下的轴的值是由什么决定的呢?就像NaN在下面描述的那样,是什么决定了结果中的值?比如,在NaN的回答中,“np.mean(a,axis=(2,3))”
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])