gpt4 book ai didi

python - 在 NumPy 数组上使用 += 的意外结果

转载 作者:IT老高 更新时间:2023-10-28 22:24:51 26 4
gpt4 key购买 nike

我正在使用标准方法在 Python 中使用 NumPy 创建对称矩阵/数组:

x = rand(500,500)
x = (x+x.T)
all(x==x.T)
> True

现在让我们聪明点:

x = rand(500,500)
x += x.T
all(x==x.T)
> False

等等,什么?

x==x.T
> array([[ True, True, True, ..., False, False, False],
[ True, True, True, ..., False, False, False],
[ True, True, True, ..., False, False, False],
...,
[False, False, False, ..., True, True, True],
[False, False, False, ..., True, True, True],
[False, False, False, ..., True, True, True]], dtype=bool)

左上段和右下段是对称的。如果我选择一个更小的数组呢?

x = rand(50,50)
x += x.T
all(x==x.T)
> True

好的....

x = rand(90,90)
x += x.T
all(x==x.T)
> True

x = rand(91,91)
x += x.T
all(x==x.T)
> False

为了确定……

x = rand(91,91)
x = (x+x.T)
all(x==x.T)
> True

这是一个错误,还是我要学习一些关于 += 和 NumPy 数组的疯狂知识?

最佳答案

transpose operation返回数组的view,这意味着没有分配新的数组。反过来,这意味着您正在同时读取和修改数组。很难说为什么结果的某些大小或某些区域有效,但很可能与 numpy 如何处理数组加法(可能它会复制子矩阵)和/或数组 View (可能对于它确实创建的小尺寸一个新的数组)。

x = x + x.T 操作有效,因为您正在创建一个新数组,然后分配给 x,当然。

关于python - 在 NumPy 数组上使用 += 的意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26278241/

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