在 Numpy 中,尤其是在做数组运算或数组操作时,返回结果不是数组的 副本 而是 视图。
在 Numpy 中,所有赋值运算不会为数组和数组中的任何元素创建副本。
numpy.ndarray.copy()函数创建一个副本。 对副本数据进行修改,不会影响到原始数据,它们物理内存不在同一位置。
【例】
import numpy as npx = np.array([1, 2, 3, 4, 5, 6, 7, 8])y = xy[0] = -1print(x)# [-1 2 3 4 5 6 7 8]print(y)# [-1 2 3 4 5 6 7 8]x = np.array([1, 2, 3, 4, 5, 6, 7, 8])y = x.copy()y[0] = -1print(x)# [1 2 3 4 5 6 7 8]print(y)# [-1 2 3 4 5 6 7 8]
【例】数组切片操作返回的对象只是原数组的视图。
import numpy as npx = np.array([[11, 12, 13, 14, 15],[16, 17, 18, 19, 20],[21, 22, 23, 24, 25],[26, 27, 28, 29, 30],[31, 32, 33, 34, 35]])y = xy[::2, :3:2] = -1print(x)# [[-1 12 -1 14 15]# [16 17 18 19 20]# [-1 22 -1 24 25]# [26 27 28 29 30]# [-1 32 -1 34 35]]print(y)# [[-1 12 -1 14 15]# [16 17 18 19 20]# [-1 22 -1 24 25]# [26 27 28 29 30]# [-1 32 -1 34 35]]x = np.array([[11, 12, 13, 14, 15],[16, 17, 18, 19, 20],[21, 22, 23, 24, 25],[26, 27, 28, 29, 30],[31, 32, 33, 34, 35]])y = x.copy()y[::2, :3:2] = -1print(x)# [[11 12 13 14 15]# [16 17 18 19 20]# [21 22 23 24 25]# [26 27 28 29 30]# [31 32 33 34 35]]print(y)# [[-1 12 -1 14 15]# [16 17 18 19 20]# [-1 22 -1 24 25]# [26 27 28 29 30]# [-1 32 -1 34 35]]
