如何修改新数组且不改动其初始关联的原NumPy数组?
解决NumPy数组修改同步问题
在NumPy中,img_2 = img_1这种赋值操作并不是创建新数组,而是让img_2成为img_1的引用——两个变量指向同一块内存空间,所以修改img_2时,img_1必然同步变化。要让img_1保持初始状态,你需要为img_1创建一个独立的副本,常用方法有三种:
方法1:使用数组的copy()方法
这是最直观的方式,会创建数组的深拷贝:
import numpy as np img_1 = np.arange(25).reshape(5,5) img_2 = img_1.copy() # 创建独立副本 locs = np.where(img_2 >= 0) img_2[locs] = [65000] # 此时img_1仍为初始的5x5数组,img_2是修改后的数组
方法2:使用np.copy()函数
和copy()方法效果一致,属于函数式的调用方式:
img_2 = np.copy(img_1)
方法3:利用切片创建浅拷贝
对于纯数值的多维数组,切片操作会创建浅拷贝,足够满足当前需求:
img_2 = img_1[:]
以上三种方式都能让img_2成为独立于img_1的新数组,修改img_2不会影响img_1的初始状态。
内容的提问来源于stack exchange,提问作者MH_AU
相关产品推荐
相关产品推荐

