开发手册 欢迎您!
软件开发者资料库

Python NumPy Array(数组) copy vs view

NumPy(Numerical Python的缩写)是一个开源的Python科学计算库。使用NumPy,就可以很自然地使用数组和矩阵。NumPy包含很多实用的数学函数,涵盖线性代数运算、傅里叶变换和随机数生成等功能。本文主要介绍Python NumPy Array(数组) Copy和View

1、copy 和 view的区别

copy和view之间的主要区别是copy是一个新数组,而该view只是原始数组的view。

copy拥有数据,对copy所做的任何更改都不会影响原始数组,对原始数组所做的任何更改也不会影响copy。

该view不拥有数据,对该view所做的任何更改都会影响原始数组,而对原始数组所做的任何更改都会影响该view。

2、copy

例如:

制作副本,更改原始数组,然后显示两个数组:

import numpy as nparr = np.array([1, 2, 3, 4, 5])x = arr.copy()arr[0] = 42print(arr)print(x)

副本不应受到对原始阵列所做更改的影响。

3、view

例如:

进行查看,更改原始数组,然后显示两个数组:

import numpy as nparr = np.array([1, 2, 3, 4, 5])x = arr.view()arr[0] = 42print(arr)print(x)

视图应该受到对原始数组所做更改的影响。

在VIEW中进行更改:

例如:

创建view,更改view,并显示两个数组:

import numpy as nparr = np.array([1, 2, 3, 4, 5])x = arr.view()x[0] = 31print(arr)print(x)

原始数组应该受到对view所做更改的影响。

4、判断数组是否拥有数据

每个NumPy数组都具有属性base,如果该数组拥有数据,则该属性返回None

否则,base属性引用原始对象。

例如:

打印base属性的值以检查数组是否拥有其数据:

import numpy as nparr = np.array([1, 2, 3, 4, 5])x = arr.copy()y = arr.view()print(x.base)print(y.base)

copy返回None
view返回原始数组。