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