如何复制NumPy数组并在副本中修改?赋值后修改未生效问题
问题原因与解决方法
问题根源:
NumPy里直接用x2 = x这种赋值操作,并不是创建新数组,只是给原数组对象新增了一个引用。也就是说x、x2、x3其实指向的是同一块内存里的数组。你修改x2的时候,原x已经被同步修改;后面修改x3时,又在已经被x2改动过的数组上操作,最后所有变量指向的都是这个被反复修改后的数组,自然看起来x2、x3和x完全相同。解决办法:
要给x创建独立的副本,使用数组的.copy()方法或者np.copy()函数即可:import numpy as np x = np.random.randint(10, size=100) x2 = x.copy() # 创建原数组的独立副本 x3 = x.copy() # 创建原数组的独立副本 for i in range(1,x.shape[0]-1): x2[i] = (x[i-1]+x[i+1])/2 # 修改的是x2副本,不会影响原x for i in range(3,x.shape[0]-3): x3[i] = (x[i-2]+x[i-1]+x[i+1] + x[i+2])/4 # 修改的是x3副本,基于原x计算这样x2和x3就是完全独立于原x的新数组,修改它们既不会影响原x,也不会互相干扰。
内容的提问来源于stack exchange,提问作者AkashSngh
相关产品推荐
相关产品推荐

