NumPy 副本和视图学习笔记
1. 副本和视图
在 NumPy 中,我们可以通过复制数组来创建新的数组,这个新的数组被称为副本(copy)。同时,在某些情况下,只是返回了一个与原始数组共享数据存储区域的新数组,这个新数组被称为视图(view)。
1.1 副本
副本是一个新的数组对象,它与原始数组的数据不共享。这意味着,如果我们更改副本中的数据,原始数组不会受到影响。我们可以使用.copy()方法来创建一个副本。
pythonCopy Codeimport 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 Codeimport 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 Codeimport 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]
从输出结果中,我们可以看到:
- 原始数组被修改了,因为视图与原始数组共享数据存储区域。
- 副本未受到影响,因为副本与原始数组的数据不共享。