NumPy数组复制与视图详解
作者:小万哥丶
NumPy 数组的复制与视图
NumPy 数组的复制和视图是两种不同的方式来创建新数组,它们之间存在着重要的区别。
复制
复制 会创建一个包含原始数组相同元素的新数组,但这两个数组拥有独立的内存空间。这意味着对复制进行的任何更改都不会影响原始数组,反之亦然。
创建副本可以使用以下方法:
arr.copy()
:创建一个新的数组,该数组包含与原始数组相同元素的副本。 np.array(arr)
:将数组转换为新的 NumPy 数组。 arr[:]
:使用切片创建整个数组的副本。
示例:
import numpy as np arr = np.array([1, 2, 3, 4, 5]) # 创建副本 copy = arr.copy() # 修改副本 copy[2] = 100 # 打印原始数组和副本 print(arr) print(copy)
输出:
[ 1 2 3 4 5]
[ 1 2 100 4 5]
视图
视图 是对原始数组数据的引用,不拥有独立的内存空间。这意味着对视图进行的任何更改都会直接反映在原始数组中,反之亦然。
创建视图可以使用以下方法:
arr.view()
:创建一个新的数组,该数组是原始数组数据的视图。 arr[start:end]
:使用切片创建原始数组的视图。 arr.reshape()
:改变数组的形状,但不改变底层数据。
示例:
import numpy as np arr = np.array([1, 2, 3, 4, 5]) # 创建视图 view = arr.view() # 修改视图 view[2] = 100 # 打印原始数组和视图 print(arr) print(view)
输出:
[ 1 2 100 4 5]
[ 1 2 100 4 5]
检查数组是否拥有数据
我们可以使用 arr.base
属性来检查数组是否拥有其数据。如果 arr.base
为 None
,则数组拥有自己的数据,否则它是一个视图。
示例:
import numpy as np arr = np.array([1, 2, 3, 4, 5]) copy = arr.copy() view = arr.view() print(copy.base) # None print(view.base) # <ndarray object at 0x00000222588287E0>
练习
使用以下代码创建数组 arr
:
import numpy as np arr = np.array([10, 20, 30, 40, 50])
并使用以下方法创建 arr
的副本:
arr.copy()
np.array(arr)
arr[:]
在每个方法之后,打印原始数组和副本,并验证它们是否相等。
在评论中分享您的代码和结果。
Sure, here is the requested Markdown formatted content:
获取数组的形状
NumPy 数组的形状描述了数组中元素的组织方式,并由包含每个维度中元素数量的元组表示。
获取数组形状
可以使用 arr.shape
属性获取 NumPy 数组的形状。它返回一个元组,其中每个元素表示相应维度的长度。
示例:
import numpy as np # 创建一个二维数组 arr = np.array([[1, 2, 3], [4, 5, 6]]) # 获取数组形状 print(arr.shape)
输出:
(2, 3)
这意味着数组包含 2 行和 3 列。
形状元组的含义
形状元组中的每个元素表示相应维度的长度。例如,如果形状为 (2, 3, 4)
,则数组具有:
2 个行 3 列 每个元素 4 个值
使用 ndmin 创建具有特定形状的数组
我们可以使用 ndmin
参数来创建具有指定形状的新数组,即使原始数据不具有该形状。ndmin
参数指定要创建的最小维度数。如果原始数据具有比 ndmin
更高的维度,则形状将保留。如果维度数不足,则将添加新维度,并用 1 填充元素。
示例:
import numpy as np # 使用 ndmin=5 创建一个包含值 1,2,3,4 的向量 arr = np.array([1, 2, 3, 4], ndmin=5) print(arr) print(arr.shape)
输出:
[[[[1 2 3 4]]]]
(1, 1, 1, 1, 4)
练习
创建以下形状的 NumPy 数组,并打印它们的形状:
一个包含 10 个元素的一维数组。 一个包含 5 行 4 列的二维数组。 一个包含 2 x 3 x 2 的三维数组。
在评论中分享您的代码和输出。
最后
到此这篇关于NumPy数组复制与视图详解的文章就介绍到这了,更多相关NumPy数组复制与视图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!