检查发现自己代码中的bug是由如下原因导致,
1. numpy数组的切片是views而不是copy
2. += 符号没有copy新的对象,直接覆盖原地址,类似使用pandas的时候设置inplace=True
我下面给出一个示例代码以及代码的输出结果,以后写的时候需要注意。
import numpy as np
a = np.array([1, 2, 3, 4, 5])
b = a[2:4]
print("views of a[2:4]", b)
b += 10
print("b is changed to", b)
print("a is changed to", a)
b = b + 10
print("b is new object. ", b)
print(f"a is not changed. {a}")
输出结果:
views of a[2:4] [3 4]
b is changed to [13 14]
a is changed to [ 1 2 13 14 5]
b is new object. [23 24]
a is not changed. [ 1 2 13 14 5]