NumPy 副本和视图学习笔记

1. 副本和视图

在 NumPy 中,我们可以通过复制数组来创建新的数组,这个新的数组被称为副本(copy)。同时,在某些情况下,只是返回了一个与原始数组共享数据存储区域的新数组,这个新数组被称为视图(view)。

1.1 副本

副本是一个新的数组对象,它与原始数组的数据不共享。这意味着,如果我们更改副本中的数据,原始数组不会受到影响。我们可以使用.copy()方法来创建一个副本。

pythonCopy Code
import numpy as np # 创建一个数组 arr = np.array([1, 2, 3, 4, 5]) # 创建副本 arr_copy = arr.copy() # 修改副本 arr_copy[0] = 10 # 查看原始数组和副本 print("原始数组:", arr) print("副本:", arr_copy)

输出结果为:

Copy Code
原始数组: [1 2 3 4 5] 副本: [10 2 3 4 5]

1.2 视图

视图是一个新的数组对象,它与原始数组共享相同的数据存储区域。这意味着,如果我们更改视图中的数据,原始数组也会受到影响。我们可以使用切片操作来创建一个视图。

pythonCopy Code
import numpy as np # 创建一个数组 arr = np.array([1, 2, 3, 4, 5]) # 创建视图 arr_view = arr[1:4] # 修改视图 arr_view[0] = 10 # 查看原始数组和视图 print("原始数组:", arr) print("视图:", arr_view)

输出结果为:

Copy Code
原始数组: [ 1 10 3 4 5] 视图: [10 3 4]

2. 实例

下面是一个使用副本和视图的示例,在这个示例中,我们将创建一个 NumPy 数组,并使用副本和视图来对该数组进行修改。

pythonCopy Code
import numpy as np # 创建一个数组 arr = np.array([[1, 2], [3, 4], [5, 6]]) # 创建副本 arr_copy = arr.copy() # 创建视图 arr_view = arr[:, 0] # 修改副本和视图 arr_copy[0, 0] = 10 arr_view[1] = 20 # 查看原始数组、副本和视图 print("原始数组:\n", arr) print("副本:\n", arr_copy) print("视图:\n", arr_view)

输出结果为:

Copy Code
原始数组: [[ 1 2] [ 3 20] [ 5 6]] 副本: [[10 2] [ 3 4] [ 5 6]] 视图: [ 1 20 5]

从输出结果中,我们可以看到:

  • 原始数组被修改了,因为视图与原始数组共享数据存储区域。
  • 副本未受到影响,因为副本与原始数组的数据不共享。