10分钟
拷贝和视图
- 当处理
ndarray
时,它的数据存储区有时被拷贝,但有时并不被拷贝。有三种情况。- 完全不拷贝:简单的赋值操作并不拷贝
ndarray
的任何数据,这种情况下是新的变量引用ndarray
对象(类似于列表的简单赋值) - 视图和浅拷贝:不同的
ndarray
可能共享相同的数据存储区。如ndarray.view()
方法创建一个新的ndarray
但是与旧ndarray
共享相同的数据存储区。新创建的那个数组称作视图数组。- 对于视图数组,
ndarray.base
返回的是拥有数据存储区的那个底层ndarray
。而非视图数组的ndarray.base
返回None
ndarray.flags.owndata
返回数组是否拥有基础数据- 对于数组的分片操作返回的是一个
ndarray
的视图。对数组的索引返回的不是视图,而是含有基础数据。
- 对于视图数组,
- 深拷贝:
ndarray.copy()
操作会返回一个完全的拷贝,不仅拷贝ndarray
也拷贝数据存储区。
- 完全不拷贝:简单的赋值操作并不拷贝
学员评价