gpt4 book ai didi

python - Numpy:为什么 'a += a.T' 不起作用?

转载 作者:太空狗 更新时间:2023-10-29 17:47:09 24 4
gpt4 key购买 nike

如 scipy 讲义中所述,这不会按预期工作:

a = np.random.randint(0, 10, (1000, 1000))
a += a.T
assert np.allclose(a, a.T)

但是为什么?作为 View 如何影响此行为?

最佳答案

a += a.T

就地求和(在处理时使用 View a.T),所以你最终得到一个非对称矩阵你可以很容易地检查这个,即我得到了:

In [3]: a
Out[3]:
array([[ 6, 15, 7, ..., 8, 9, 2],
[15, 6, 9, ..., 14, 9, 7],
[ 7, 9, 0, ..., 9, 5, 8],
...,
[ 8, 23, 15, ..., 6, 4, 10],
[18, 13, 8, ..., 4, 2, 6],
[ 3, 9, 9, ..., 16, 8, 4]])

你可以看到它不是对称的,对吧? (比较右上和左下的项目)

如果你做一个真实的副本:

a += np.array(a.T)

它工作正常,即:

In [6]: a
Out[6]:
array([[ 2, 11, 8, ..., 9, 15, 5],
[11, 4, 14, ..., 10, 3, 13],
[ 8, 14, 14, ..., 10, 9, 3],
...,
[ 9, 10, 10, ..., 16, 7, 6],
[15, 3, 9, ..., 7, 14, 1],
[ 5, 13, 3, ..., 6, 1, 2]])

为了更好地理解它为什么这样做,您可以想象您自己编写了如下循环:

In [8]: for i in xrange(1000):
for j in xrange(1000):
a[j,i] += a[i,j]
....:

In [9]: a
Out[9]:
array([[ 4, 5, 14, ..., 12, 16, 13],
[ 3, 2, 16, ..., 16, 8, 8],
[ 9, 12, 10, ..., 7, 7, 23],
...,
[ 8, 10, 6, ..., 14, 13, 23],
[10, 4, 6, ..., 9, 16, 21],
[11, 8, 14, ..., 16, 12, 12]])

它添加 a[999,0] 来计算 a[0,999] 但 a[999,0] 已经有 a[999,0] + a[0,999] 的总和 - 所以在主对角线下方添加值两次。

关于python - Numpy:为什么 'a += a.T' 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36787025/

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