python - 共享数组 View 和数组数据副本的定义和区别?

标签 python arrays numpy scipy

我有一本书上写着,“重要的是要知道什么时候我们在处理共享数组 View ,什么时候我们有一个 数组数据的副本。”,但是这本书从未具体说明这两件事是什么。

谁能给出一个非常简单的解释什么是共享数组 View ,什么是数组数据的副本?和区别?有人可以用一个简单的比喻来解释吗?谢谢!

最佳答案

一种检查方法是使用 numpy 的 may_share_memory:

In [11]: a = np.array([1, 2, 3])

In [12]: b = a[0:2]

In [13]: c = a.copy()

In [14]: np.may_share_memory(a, b)
Out[14]: True

In [15]: np.may_share_memory(a, c)
Out[15]: False

In [16]: np.may_share_memory(b, c)
Out[16]: False

这很重要,因为分配给副本不会影响原始数组,而更改 View 会:

In [21]: b[1] = 7

In [22]: a
Out[22]: array([1, 7, 3])

In [23]: c[1] = 11

In [24]: a
Out[24]: array([1, 7, 3])

In [25]: c
Out[25]: array([ 1, 11,  3])

关于python - 共享数组 View 和数组数据副本的定义和区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21947210/

相关文章:

python - 来自两个数据帧的共现矩阵。 Python

python - 如何通过教程解决使用 graphene django 基本设置的 ImportError?

python - 将一个或多个文件拖放到 QListWidget 或 QLineEdit 中

javascript - Typescript Convert Object to Array - 因为 *ngFor 不支持对象的迭代

javascript - 如何在 JavaScript 中创建 JSONArray 的子弹图?

python - 在某些位置添加子矩阵

python - 向量化逻辑跨越行的 for 循环

python - 是否可以查询z3的Python API是否发生超时?

python - 计算每行在 numpy.array 中出现的次数

java - 在 Java 中将元素从一个数组插入到另一个数组