python - 为什么将切片的 numpy 数组分配给另一个变量会继续切片?
问题描述
我一直在使用 numpy 数组遇到一些奇怪的行为。考虑下面的代码:
import numpy as np
# 1
a = [np.arange(16)]
b = a
print(f'b = {b}')
# 2
b[0] = a[0][::2]
print(f'b = {b}')
# 3
b[0] = a[0][::2]
print(f'b = {b}')
b = [array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15])]
b = [array([ 0, 2, 4, 6, 8, 10, 12, 14])]
b = [array([ 0, 4, 8, 12])]
我希望b
第 2 节中的内容与第 3 节中的内容相同b
,但由于某种原因,它似乎有所不同。当 1D 数组时,这似乎不会发生a
- 写入b = a[::2]
两次会为b
. 为什么在a
2D 数组时会发生这种情况?
解决方案
在您的代码中,您给出了b = a
Sob
只是对a
. 每次更改 的值时b
,也会更改 的值a
。有关分配与复制与深复制的更多详细信息,请参阅此链接
b[0] = a[0][::2]
上面的代码要求 b 跳过b
(a
与b
) 的值。因此,每次您这样做时,都会进一步减少它。
如果要复制,请使用
b = a.copy()
或者
b = a[::]