gpt4 book ai didi

python - keepdims 在 Numpy (Python) 中的作用是什么?

转载 作者:行者123 更新时间:2023-11-28 19:33:57 27 4
gpt4 key购买 nike

当我使用np.sum 时,我遇到了一个名为keepdims 的参数。查找后the docs ,我还是不明白keepdims的意思。

keepdims: bool, optional

If this is set to True, the axes which are reduced are left in the result as dimensions with size one. With this option, the result will broadcast correctly against the original arr.

如果有人能通过一个简单的例子来理解这一点,我将不胜感激。

最佳答案

考虑一个小的二维数组:

In [180]: A=np.arange(12).reshape(3,4)
In [181]: A
Out[181]:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])

跨行求和;结果是一个 (3,) 数组

In [182]: A.sum(axis=1)
Out[182]: array([ 6, 22, 38])

但是要将 A 和(或除以)sum 相加(或相除)需要 reshape

In [183]: A-A.sum(axis=1)
...
ValueError: operands could not be broadcast together with shapes (3,4) (3,)
In [184]: A-A.sum(axis=1)[:,None] # turn sum into (3,1)
Out[184]:
array([[ -6, -5, -4, -3],
[-18, -17, -16, -15],
[-30, -29, -28, -27]])

如果我使用 keepdims,“结果将针对”A 正确广播。

In [185]: A.sum(axis=1, keepdims=True)   # (3,1) array
Out[185]:
array([[ 6],
[22],
[38]])
In [186]: A-A.sum(axis=1, keepdims=True)
Out[186]:
array([[ -6, -5, -4, -3],
[-18, -17, -16, -15],
[-30, -29, -28, -27]])

如果我用另一种方式总结,我不需要keepdims。广播这个总和是自动的:A.sum(axis=0)[None,:]。但是使用 keepdims 没有坏处。

In [190]: A.sum(axis=0)
Out[190]: array([12, 15, 18, 21]) # (4,)
In [191]: A-A.sum(axis=0)
Out[191]:
array([[-12, -14, -16, -18],
[ -8, -10, -12, -14],
[ -4, -6, -8, -10]])

如果您愿意,这些操作对于 np.mean 可能更有意义,对列或行上的数组进行规范化。无论如何,它可以进一步简化原始数组和求和/平均值之间的数学运算。

关于python - keepdims 在 Numpy (Python) 中的作用是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40927156/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com