NumPy 教程 之 NumPy 副本和视图 1

简介: NumPy副本和视图是处理数据时的重要概念。副本是对原始数据的完全拷贝,修改副本不会影响原始数据;而视图则是原始数据的引用,修改视图会影响原始数据。视图通常通过切片操作或`view()`函数生成,副本则通过`copy()`函数创建。简单赋值不会生成副本,而是共享原始数据。

NumPy 教程 之 NumPy 副本和视图 1

NumPy 副本和视图

副本是一个数据的完整的拷贝,如果我们对副本进行修改,它不会影响到原始数据,物理内存不在同一位置。

视图是数据的一个别称或引用,通过该别称或引用亦便可访问、操作原有数据,但原有数据不会产生拷贝。如果我们对视图进行修改,它会影响到原始数据,物理内存在同一位置。

视图一般发生在:

1、numpy 的切片操作返回原数据的视图。
2、调用 ndarray 的 view() 函数产生一个视图。

副本一般发生在:

Python 序列的切片操作,调用deepCopy()函数。
调用 ndarray 的 copy() 函数产生一个副本。

无复制

简单的赋值不会创建数组对象的副本。 相反,它使用原始数组的相同id()来访问它。 id()返回 Python 对象的通用标识符,类似于 C 中的指针。

此外,一个数组的任何变化都反映在另一个数组上。 例如,一个数组的形状改变也会改变另一个数组的形状。

目录
相关文章
|
5月前
|
Python
NumPy 教程 之 NumPy 副本和视图 4
副本是数据的完整拷贝,修改副本不会影响原始数据;而视图则是数据的别名,对视图的修改会影响原始数据。通常,NumPy的切片操作和`ndarray.view()`函数会产生视图,而Python序列的切片操作、`deepCopy()`函数以及`ndarray.copy()`函数则会产生副本。示例展示了如何通过切片创建视图,并且修改视图会影响原数组。变量`a`和`b`都是数组`arr`的一部分视图,尽管它们有不同的ID,但对视图的修改会直接影响原数据。
44 3
|
5月前
|
Python
NumPy 教程 之 NumPy 副本和视图 1
NumPy 副本和视图教程介绍:副本是对原始数据的完全拷贝,修改副本不会影响原始数据;而视图则是原始数据的引用,修改视图会影响原始数据。视图通常通过切片操作或 `ndarray.view()` 方法获得,副本则通过 `ndarray.copy()` 或 `deepCopy()` 函数生成。简单赋值不创建副本,而是共享原始数据。
51 9
|
5月前
|
Python
NumPy 教程 之 NumPy 副本和视图 2
副本是数据的完全拷贝,对副本所做的任何更改都不会影响原始数据。而视图则是对原始数据的引用,对视图的任何操作都会影响到原始数据。视图通常通过切片操作或`ndarray.view()`函数生成;副本则通过Python序列切片操作、`deepCopy()`函数或`ndarray.copy()`函数生成。简单赋值不会创建新副本,而是共享原始数据。示例展示了简单赋值如何导致两个数组共享同一内存,更改其中一个数组的形状会影响另一个。
52 7
|
5月前
|
Python
NumPy 教程 之 NumPy 副本和视图 3
副本是对原始数据的完全拷贝,修改副本不影响原始数据;而视图则是原始数据的别名,修改视图会影响原始数据。视图通常在切片操作或使用`view()`函数时产生,副本则在使用`copy()`函数或Python序列切片操作及`deepCopy()`函数时生成。示例展示了如何使用`view()`创建数组视图,并说明了其对原始数组形状的影响。
47 6
|
5月前
|
Python
NumPy 教程 之 NumPy 副本和视图 5
NumPy副本和视图教程介绍副本与视图的区别:副本是对原始数据的完全拷贝,修改副本不会影响原始数据;而视图则是对原始数据的引用,修改视图会影响原始数据。视图通常在切片操作或使用`view()`函数时产生;副本则在序列切片操作、调用`deepCopy()`或使用`copy()`函数时生成。示例展示了使用`copy()`函数创建副本,并验证了修改副本不会改变原始数据。
59 4
|
7月前
|
Python
NumPy 教程 之 NumPy 从已有的数组创建数组 5
**NumPy从已有数组创建新数组** `numpy.frombuffer`将缓冲区转化为动态数组。接受`buffer`(可为任意对象),将其流式转化为ndarray。关键参数: - `buffer`: 流输入源。 - `dtype`=float: 数组数据类型。 - `count`=-1: 数据量,-1表示全部。 - `offset`=0: 起始读取位置。注意:处理字符串时需转换为bytestring。
34 9
|
7月前
|
存储 Python
NumPy 教程 之 NumPy 从已有的数组创建数组 3
`NumPy教程:使用numpy.asarray从已有数据(如列表或元组)创建数组。此函数将任意输入转换为ndarray,参数包括数据类型dtype和内存排序order。例如,将元组列表转为数组:\( x = [(1,2,3), (4,5)] \),\( a = np.asarray(x) \) 输出:\[ (1, 2, 3) (4, 5) \]。
45 7
|
7月前
|
存储 Python
NumPy 教程 之 NumPy 创建数组 8
**NumPy创建数组:使用`zeros_like`创建与原数组形状相同的零数组。`zeros_like(a, dtype=None, order='K', subok=True, shape=None)`基于给定数组`a`的形状,生成所有元素为0的新数组。参数可定制数据类型、存储顺序和形状。实例:创建一个3x3的零矩阵。**
61 7
|
7月前
|
存储 Python
NumPy 教程 之 NumPy 从已有的数组创建数组 4
在NumPy教程中,了解如何从现有数据创建数组。`numpy.asarray`是简化版的`numpy.array`,接受输入如列表、元组或多维数组,转化为numpy数组。参数包括:`a`作为输入数据,`dtype`指定数据类型,默认为None,`order`定义内存顺序,可选"C"(行优先)或"F"(列优先)。示例:将整数列表 `[1, 2, 3]` 转为浮点数数组 `print(a)` 输出 `[1. 2. 3.]`。
48 3
|
7月前
|
Python
NumPy 教程 之 NumPy 创建数组 5
`NumPy`教程:使用`numpy.ones`创建全1数组,形如`numpy.ones(shape, dtype=None, order='C')`,参数`shape`定义数组形状,`dtype`指定数据类型,默认无类型,`order`设定内存布局,默认'C'(行优先)。
44 4