【Python】numpy 中的 copy 问题详解
来源:互联网 发布:南京银行 总行 知乎 编辑:程序博客网 时间:2024/06/06 13:05
这篇文章本是我在 segmentfault 上的一个回答,但是越来越觉得有必要单独拿出来,毕竟这个问题挺常见的。具体可参看 numpy
官方文档 。
正文
numpy
关于copy
有三种情况,完全不复制、视图(view
)或者叫浅复制(shadow copy
)和深复制(deep copy
)。
而 b = a[:]
这种形式就属于第二种,即视图,这本质上是一种切片操作(slicing
),所有的切片操作返回的都是视图。具体来说,b = a[:]
会创建一个新的对象 b
(所以 id(b)
和id(a)
返回的结果是不一样的),但是 b
的数据完全来自于a
,和 a
保持完全一致,换句话说,b
的数据完全由a
保管,他们两个的数据变化是一致的,可以看下面的示例:
a = np.arange(4) # array([0, 1, 2, 3])b = a[:] # array([0, 1, 2, 3])b.flags.owndata # 返回 False,b 并不保管数据a.flags.owndata # 返回 True,数据由 a 保管# 改变 a 同时也影响到 ba[-1] = 10 # array([0, 1, 2, 10])b # array([0, 1, 2, 10])# 改变 b 同时也影响到 ab[0] = 10 # array([10, 1, 2, 10])a # array([10, 1, 2, 10])
b = a
和 b = a[:]
的差别就在于后者会创建新的对象,前者不会。两种方式都会导致 a
和 b
的数据相互影响。
要想不让 a
的改动影响到 b
,可以使用深复制:
unique_b = a.copy()
END
0 0
- 【Python】numpy 中的 copy 问题详解
- Python numpy中的对象传递问题
- <Python> Numpy中的矩阵乘法问题
- python之numpy详解
- python numpy库详解
- Python中的NumPy函数库
- Python中的numpy包
- Python中的Numpy入门教程
- Python中的Numpy入门教程
- Python中的Numpy入门教程
- Python中的numpy
- Python中的Numpy入门教程
- Python中的Numpy入门教程
- Python中的Numpy入门教程
- Python中的包numpy
- Python中的Numpy入门教程
- Python中的Numpy入门教程
- Python 中的numpy 库
- 嵌入式编程中关于const,static,extern,volatile的用法
- win7下 caffe python接口配置 import caffe时报错,ImportError: No module named google.protobuf.internal
- 部署xhprof监控php效率(linux版本)
- Directx11教程四十之加载OBJ模型
- 阿里云服务器 centos7 搭建FTP服务器
- 【Python】numpy 中的 copy 问题详解
- CODEVS 1039 数的划分
- cookie
- Redirect all HTTP requests to HTTPS with Nginx
- 安卓开源项目周报0301
- 错误提示:LocalBroadcastManager cannot be resolved to a type
- Java中Scanner的理解
- 用R建立岭回归和lasso回归
- C#Json序列化、反序列化之Dictionary 字典类型