在Python中克隆或复制列表有哪些选项?
在使用时new_list = my_list,每次都会对new_list更改进行任何修改my_list.为什么是这样?
因此,使用numpy数组将一个分配给另一个仅复制引用:即
import numpy as np
x = np.array([5,8])
y = x
y += 1
x
Out: array([6, 9])
Run Code Online (Sandbox Code Playgroud)
如果我想复制一个深层副本,则应该使用x.copy()。当从更高维度的数组中获取视图时,也是如此,例如
A=np.array([[4,10],[8,1]])
b=A[:,1]
b+=1
A
Out: array([[ 4, 11],
[ 8, 2]])
Run Code Online (Sandbox Code Playgroud)
反过来(从上面继续):
A[:,1]=b
b
Out: array([11, 2])
b+=1
A
Out: array([[ 4, 12],
[ 8, 3]])
Run Code Online (Sandbox Code Playgroud)
因此,到目前为止,一切都一直在进行。但是现在如果我继续做下去:
A[:,0] = b
A
Out: array([[12, 12],
[ 3, 3]])
b
Out: array([12, 3])
b+=1
A
Out: array([[12, 13],
[ 3, 4]])
Run Code Online (Sandbox Code Playgroud)
我不明白的是为什么第一列保持不变,而另一列却保持不变?为什么第二列继续指向b数组?是否有任何规则来决定何时在分配时深度复制数组?
什么是从数组复制到矩阵的更快的方法.例:
A = np.zeros((5, 3))
B = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
Run Code Online (Sandbox Code Playgroud)
将B的值复制到A后,生成的A应为:
[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[ 0 0 0]
[ 0 0 0]]
Run Code Online (Sandbox Code Playgroud)
先感谢您
这是我的代码
import numpy as np
v = np.zeros(4)
backup = np.zeros(4)
for i in range(3):
backup = v
v[0] = 1
print(backup)
Run Code Online (Sandbox Code Playgroud)
我的输出是:
[1. 0. 0. 0.]
[1. 0. 0. 0.]
[1. 0. 0. 0.]
Run Code Online (Sandbox Code Playgroud)
但我预计:
[0. 0. 0. 0.]
[1. 0. 0. 0.]
[1. 0. 0. 0.]
Run Code Online (Sandbox Code Playgroud)
为什么备份矩阵在分配之前更新?