NumPy 副本和视图

视图 ( 浅拷贝 ) 一般发生在:
1 numpy 的切片操作返回原数据的视图。
2 、调用 ndarray view() 函数产生一个视图。
对视图进行修改,它会影响到原始数据
副本 ( 深拷贝 ) 一般发生在:
Python 序列的切片操作,调用 deepCopy() 函数。
调用 ndarray copy() 函数产生一个副本。
对副本进行修改,它不会影响到原始数据
1 、无复制
简单的赋值不会创建数组对象的副本。 相反,它使用原始数组的相同 id() 来访问它。 id() 返回 Python 对象的通用标识符,类似于 C 中的指针。
一个数组的任何变化都反映在另一个数组上。 例如,一个数组的形状改变也会改变另一个数组的
形状。
import numpy as np
arr=np.array([1,2,3])
print(arr)#[1 2 3]
print(id(arr))#2296801808944

2 、视图或浅拷贝
         ndarray.view() 实现数组的浅拷贝,切片也是一种浅拷贝
import numpy as np
arr1=np.array([[1,2,3],[4,5,6]])
arr2=arr1.view()
print(arr1)
# [[1 2 3]
#  [4 5 6]]
print("---------")
print(arr2)
# [[1 2 3]
#  [4 5 6]]
print(id(arr1),id(arr2))#2847997319408 2847997317680

3 、副本或深拷贝
ndarray.copy() 函数创建一个副本。 对副本数据进行修改,不会影响到原始数据,它们物理内存不在同一位置。
import numpy as np
a = np.array([[1,1], [2,2]])
print(a)
# [[1 1]
#  [2 2]]
b = a.copy()
print(b)# b 与 a 不共享任何内容
# [[1 1]
#  [2 2]]
print(id(a),id(b))
# 3014993728048 3014990560304
b[1,0] = 100
print(b)
# [[  1   1]
#  [100   2]]
print(a)
# [[1 1]
#  [2 2]]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值