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