Numpy中深拷贝、浅拷贝和视图

1、浅拷贝
浅拷贝,指的是重新分配一块内存,创建一个新的对象,但里面的元素是原对象中各个子对象的引用。
浅拷贝会创建新对象,其内容非原对象本身的引用,而是原对象内第一层对象的引用。(拷贝组合对象,不拷贝子对象)
æµæ·è´

 

 

 

浅拷贝——ndarray.view()

共享“视图”(view)的两个变量,当其中一个变量的值改变时,另一个变量的值也随之改变。此时,变量间的“拷贝”也是“浅拷贝”。

 

2、深拷贝

深拷贝,是指重新分配一块内存,创建一个新的对象,并且将原对象中的元素,以递归的方式,通过创建新的子对象拷贝到新对象中。因此,它的时间和空间开销要高,新对象和原对象没有任何关联。

è¥ä¸å¾æ示,æ·±æ·è´å,æ°çå¤å对象åå«ç对象,è¥å¯¹è±¡ä¸ºä¸å¯å对象,å id å¼ä¿æä¸å,è¥å¯¹è±¡ä¸ºå¯å对象,å id å¼åçæ¹å

 

3、存取元素中的“浅拷贝”与“深拷贝”

当使用整数序列对数组元素进行存取时,将整数序列中的每个元素作为下标,整数序列可以是列表或者数组。使用整数序列作为下标获得的数组不和原始数组共享数据空间

 

 当使用布尔数组b作为下标存取数组x中的元素时,将收集数组x中所有在数组b中对应下标为True的元素。使用布尔数组作为下标获得的数组不和原始数组共享数据空间,注意这种方式只对应于布尔数组,不能使用布尔列表。

4、视图
视图是数据的一个别称或引用,通过该别称或引用亦便可访问、操作原有数据,但原有数据不会产生拷贝。如果我们对视图进行修改,它会影响到原始数据,物理内存在同一位置。

视图一般发生在:
1、numpy 的切片操作返回原数据的视图。
2、调用 ndarray 的 view() 函数产生一个视图。

ndarray.view()

ndarray.view()会创建一个新的数组对象,该方法创建的新数组的维数更改不会更改原始数据的维数。

 

 使用切片创建视图修改数据会影响到原始数组

 

 

ndarray.copy()

ndarray.copy()函数创建一个副本。 对副本数据进行修改,不会影响到原始数据,它们物理内存不在同一位置。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值