操作和修改数组时,他们的数据有时被复制到一个新的数组中有时候没有,这很容易让人误解。

下面举三个例子:

1.No copy at all (一点也没有复制)

import numpy as np

a = np.arange(12)

b = a  #并没有新的对象被创建,a和b只是相同ndarray对象的两个名字而已,下面用id()来验证一下

print(id(a),id(b))

Python的Numpy的Array的副本(copy)和视图(view)

可见a和b指向同一个数据对象。

2.View or  Shallow Copy

c = a.view()    #method of numpy.ndarry instance  numpy.ndarry实例的方法

Python的Numpy的Array的副本(copy)和视图(view)

以下可见c = a.view()创建了一个新的对象,但是这两个对象共享相同的数据。

Python的Numpy的Array的副本(copy)和视图(view)

如上所见,对象c和a都可以对数据的数值进行修改,但是c不能对shape属性进行修改。

另外切片数据也会返回“视图”对象。

Python的Numpy的Array的副本(copy)和视图(view)



s[:]是s的一个视图

3.Deep Copy(深度复制)

d = a.copy()    #a new array object with new data is created

Python的Numpy的Array的副本(copy)和视图(view)


本文来自https://docs.scipy.org/doc/numpy-dev/user/quickstart.html开源社区,里面有完善的文档,取之不尽的资源。大家可以多去访问开源社区。

相关文章:

  • 2021-11-06
  • 2021-05-05
  • 2022-12-23
  • 2022-03-11
  • 2022-12-23
  • 2021-11-17
  • 2022-03-09
猜你喜欢
  • 2021-08-18
  • 2022-12-23
  • 2022-12-23
  • 2021-09-30
  • 2022-12-23
  • 2021-05-14
  • 2021-11-28
相关资源
相似解决方案