numpy 矩阵切片以及深复制和浅复制的了解

矩阵切片

我们对一个一维矩阵切片的很简单,arr[2:4] 代表获取从第3个数到4个数,不包含第5个数

那如果要对矩阵切片呢?其实是同理的

arr8[:2, :2]也就是说是获取2行2列的子矩阵

不过这里有个问题,看下图

就是arr9看起来是和arr8没有任何关系的另外一个矩阵,但是改了arr9,arr8还是变了,这是怎么回事

在numpy中,为了提高效率,这种切片出来的子矩阵其实都是原矩阵的引用而已,所以改变子矩阵,原矩阵还是会变的

这时候怎么办呢

arr10是arr8的浅复制,这时候你就会发现,arr10的变化并不会影响到arr8的数值变化,200并没有变成100

那这里就要讲到深复制和浅复制的定义了

浅复制,说白了就是复制一部分,只复制了父对象,子对象就还是引用状态

arr12是arr11的浅复制,这时候如果修改arr12里面的[3,5,2]这个子对象里面的数值,arr11还是会跟着变,因为[3,5,2]这个子对象还是属于引用

arr13是arr11的深复制,意思就是全部复制,不管是父对象还是子对象,都全部复制过来,这时候arr13和arr11就是真正的两个没有任何关联的变量,随意操作arr13都不会改变arr11

回到刚刚的话题,看起来,我们的矩阵里面不也包含着类似arr11那样的子对象么,其实对于numpy矩阵来说,里面数据都是子元素,所以浅复制的时候已经把这些子元素都复制过去,所以这时候复制的变量arr10怎么改变子元素都不会改变arr8的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值