副本和视图 | 快速入门教程 |《numpy 中文文档》| python 技术论坛-大发黄金版app下载

未匹配的标注

在操作数组时,它们的数据有时会被复制到一个新的数组中,有时则不会。对于初学者来说,这常常是一个困惑的来源。有三种情况:

完全没有副本

简单的赋值不复制对象或它们的数据。

>>> a = np.array([[ 0,  1,  2,  3],
...               [ 4,  5,  6,  7],
...               [ 8,  9, 10, 11]])
>>> b = a            # no new object is created
>>> b is a           # a and b are two names for the same ndarray object
true

python将可变对象作为引用传递,因此函数调用不进行复制。

>>> def f(x):
...     print(id(x))
...
>>> id(a)    # id is a unique identifier of an object
148293216  # may vary
>>> f(a)
148293216  # may vary

视图或浅拷贝

不同的数组对象可以共享相同的数据。该方法创建一个新的数组对象,该对象将查看相同的data.view

>>> c = a.view()
>>> c is a
false
>>> c.base is a                        # c is a view of the data owned by a
true
>>> c.flags.owndata
false
>>>
>>> c = c.reshape((2, 6))                      # a's shape doesn't change
>>> a.shape
(3, 4)
>>> c[0, 4] = 1234                      # a's data changes
>>> a
array([[   0,    1,    2,    3],
       [1234,    5,    6,    7],
       [   8,    9,   10,   11]])

对数组进行切片将返回数组的视图

>>> s = a[ : , 1:3]     # spaces added for clarity; could also be written "s = a[:, 1:3]"
>>> s[:] = 10    # s[:] is a view of s. note the difference between s = 10 and s[:] = 10
>>> a
array([[   0,   10,   10,    3],
       [1234,   10,   10,    7],
       [   8,   10,   10,   11]])

深拷贝

该方法生成数组及其数据的完整副本data.copy

>>> d = a.copy()                          # a new array object with new data is created
>>> d is a
false
>>> d.base is a                           # d doesn't share anything with a
false
>>> d[0,0] = 9999
>>> a
array([[   0,   10,   10,    3],
       [1234,   10,   10,    7],
       [   8,   10,   10,   11]])

如果不再需要原始数组,有时应该在切片后调用。例如,假设是一个巨大的中间结果,而最终结果只包含一小部分,在使用切片构造时应该做一个深度复制。

>>> a = np.arange(int(1e8))
>>> b = a[:100].copy()
>>> del a  # the memory of ``a`` can be released.

函数和方法概述

下面是按类别排序的一些有用的numpy函数和方法名称的列表。参见完整列表。
数组创建
, , , , , , , , , , , , , , , , ,

转换

, , , ,

处理

, , , , , , , , , , , , , , , , , , ,

问题

, , ,

组合

, , , , , , ,

操作

, , , , , , , , , , ,

基本统计

, , ,

基础线性代数

, , , ,

本文章首发在 大发黄金版app下载 网站上。

上一篇 下一篇
讨论数量: 0



暂无话题~
网站地图