wai*_*kuo 2 python numpy linear-algebra
a是一个numpy数组,a.T它是转置.一旦我添加a和a.Tas a += a.T,答案是不期望的.谁能告诉我为什么?谢谢.
import numpy
a = numpy.ones((100, 100))
a += a.T
a
array([[ 2., 2., 2., ..., 2., 2., 2.],
[ 2., 2., 2., ..., 2., 2., 2.],
[ 2., 2., 2., ..., 2., 2., 2.],
...,
[ 3., 3., 3., ..., 2., 2., 2.],
[ 3., 3., 3., ..., 2., 2., 2.],
[ 3., 3., 3., ..., 2., 2., 2.]])
Run Code Online (Sandbox Code Playgroud)
请注意,这a.T只是一个视图a,这意味着它们拥有相同的数据.现在:
a += a.T
Run Code Online (Sandbox Code Playgroud)
添加a.T到位a,但在执行此操作时,会更改a.T(作为a.T相同数据的点).由于访问顺序a有点复杂,因此失败(您不应该相信结果是可重现的,因为它会在您更改时发生变化np.setbufsize.
为了避免它,这两个都可以工作,虽然第一个版本对我来说似乎更干净.
a = a + a.T
a += a.T.copy()
Run Code Online (Sandbox Code Playgroud)