Python中拷贝数组修改后影响原数组的问题求助
解决Numpy切片修改影响原数组的问题
这绝对是Numpy新手最容易踩的坑之一!我来给你拆解下原因和解决办法:
为啥修改切片会影响原数组?
Numpy里的数组切片(比如array[4:6])默认返回的是原数组的「视图(View)」,而不是独立的拷贝。视图本质上和原数组共享同一块内存空间,这样设计是为了处理大数据时更高效——避免无意义的内存复制拖慢速度。所以你修改视图里的元素,原数组自然会跟着改变。
咱们看你这段代码里的关键问题:
import numpy as np array = np.array([1,5,6,7,8,94]) arr_temp = array[4:6] # 这里arr_temp是原数组的视图,不是独立拷贝! arr_temp[1] = 100 print(array) # 输出array([ 1, 5, 6, 7, 8, 100]),原数组被修改
怎么让切片成为独立的拷贝?
只需要显式调用.copy()方法(或者np.copy()函数),就能得到一个和原数组数据不共享的独立数组:
方法1:用数组的.copy()方法
import numpy as np array = np.array([1,5,6,7,8,94]) arr_temp = array[4:6].copy() # 显式创建拷贝 arr_temp[1] = 100 print(array) # 输出array([ 1, 5, 6, 7, 8, 94]),符合你的预期
方法2:用np.copy()函数
arr_temp = np.copy(array[4:6])
额外小提示
如果你用的是布尔索引或者整数索引(比如array[[1,3]]),Numpy默认会返回拷贝而非视图,但切片操作始终返回视图,这点要记牢哦~
内容的提问来源于stack exchange,提问作者purvisha thakarar
相关产品推荐
相关产品推荐

