Python中Numpy的深拷贝和浅拷贝

目录
  • 1. 引言
  • 2. 浅拷贝
    • 2.1 问题引入
    • 2.2 问题剖析
  • 3. 深拷贝
    • 3.1 举个栗子
    • 3.2 探究原因
  • 4. 技巧总结
    • 4.1 判断是否指向同一内存
    • 4.2 其他数据类型
  • 5. 总结

1. 引言

深拷贝和浅拷贝是Python中重要的概念,本文重点介绍在NumPy中深拷贝和浅拷贝相关操作的定义和背后的原理。
闲话少说,我们直接开始吧!

2. 浅拷贝

2.1 问题引入

我们来举个栗子,如下所示我们有两个数组a和b,样例代码如下:

import numpy as np
a = np.array([1, 2, 3])
b = a
print('a =', a)
print('b =', b)

输出如下:

a = [1 2 3]
b = [1 2 3]

此时如果我们对数组a做如下改变,代码如下:

import numpy as np
a = np.array([1, 2, 3])
b = a
a [0] = 42
print('a =', a)
print('b =', b)

那么我们的问题为: 此时b的值应该为多少?
运行上述代码后,我们得到输出如下:

a = [42 2 3]
b = [42 2 3]

2.2 问题剖析

也许有人会觉得输出应该为??a=[42 2 3]?? 和 ??b=[1 2 3]?? ,但是运行上述代码后我们发现??a??和??b??的值均发生了相应的改变。这主要是由于在??Numpy??中对变量的赋值操作,实际上发生的为浅拷贝。

换句话说,此时两个变量指向同一块内存地址,如下所示:

所以,此时如果我们修改数组??original_array??中的某个元素,`copy_array

??由于和??original_array`公用同一块内存,所以其中的元素也会发生相应的变化。

3. 深拷贝

3.1 举个栗子

如果我们想要对??Numpy??数组执行深拷贝,此时我们可以使用函数??copy()??。

相关的样例代码如下:

import numpy as np
a = np.array([1, 2, 3])
b = a.copy()
print('a =', a)
print('b =', b)

输出如下:

a = [1 2 3]
b = [1 2 3]

此时,如果我们改变数组??a??中的元素,代码如下:

import numpy as np
a = np.array([1, 2, 3])
b = a.copy()
a [0] = 42
print('a =', a)
print('b =', b)

此时的代码输出如下:

a = [42 2 3]
b = [1 2 3]

3.2 探究原因

观察上述输出,我们可以清楚地看到数组??a??发生了改变而数组??b??没有发生变化,这是由于我们使用了深拷贝。

此时的内存地址如下:

由于 ??original_array??和??copy_array??指向不同的内存地址空间,所以此时我们对??original_array??的改变并不会对??copy_array??带来影响。

4. 技巧总结

经过上述对深拷贝和浅拷贝的举例和示例,相信大家都已有了清晰的认识,接着我们对上述知识点进行总结,归纳如下:

4.1 判断是否指向同一内存

如果我们需要知道两个变量是否指向同一块内存地址,我们可以方便地使用??is??操作。

浅拷贝示例:

a = np.array([1, 2, 3])
b = a
print(b is a)

输出如下:

True

深拷贝示例:

a = np.array([1, 2, 3])
b = a.copy()
print(b is a)

输出如下:

False

4.2 其他数据类型

尽管本文中所有的示例都使用了NumPy数组,但本文中所涉及的知识也适用于Python中的列表和字典等其他数据类型。
总之,我们需要时刻记载心中:在浅拷贝中,原始数组和新的数组共同执行同一块内存;同时在深拷贝中,新的数组是原始数据的单独的拷贝,它指向一块新的内存地址。

5. 总结

本文重点介绍了Python中对Numpy数组操作的浅拷贝和深拷贝的概念和背后的原理,同时给出了相应的代码示例。

到此这篇关于Python中Numpy的深拷贝和浅拷贝的文章就介绍到这了,更多相关Python Numpy 内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python中NumPy的安装与基本操作

    目录 Numpy是什么 NumPy的安装 多维数组 创建多维数组 多维数组的常用属性 多维数组的基本操作 数组的算术运算 数组的自身运算 随机数组 索引.切片.迭代 总结 Numpy是什么 很简单,Numpy是Python的一个科学计算的库,提供了矩阵运算的功能,其一般与Scipy.matplotlib一起使用.其实,list已经提供了类似于矩阵的表示形式,不过numpy为我们提供了更多的函数.如果接触过matlab.scilab,那么numpy很好入手. NumPy是一个高性能的科学计算和数据

  • 详解Python如何循环遍历Numpy中的Array

    目录 1. 引言 2. 使用For循环遍历 3. 函数 nditer() 4. 函数 ndenumerate() 5. 结论 1. 引言 Numpy是Python中常见的数据处理库.Numpy是 Numerical Python的缩写,它是数据科学中经常使用的库.Numpy专门用于处理矩阵运算,因为它包含各式各样的处理函数.在本文中,我们主要用于学习如何迭代遍历访问矩阵中的元素. 闲话少说,我们直接开始吧! 2. 使用For循环遍历 首先我们来看个例子,使用循环来遍历数组,样例代码如下: imp

  • python中的Numpy二维数组遍历与二维数组切片后遍历效率比较

    在python-numpy使用中,可以用双层 for循环对数组元素进行访问,也可以切片成每一行后进行一维数组的遍历. 代码如下: import numpy as np import time NUM = 160 a=np.random.random((NUM,NUM)) start = time.time() for i in range(NUM):     for j in range(NUM):         if a[i][j] == 1.0:             pass end1

  • Python数据分析 Numpy 的使用方法

    目录 简介 多维数组创建 数组的数据类型 数组维度 简介 使用 Python 进行数据分析时,比较常用的库有 Numpy.Pandas.Matplotlib,本篇文章就来说一下 Numpy 的使用方法,编辑器就使用上篇文章说过的 Jupyter. Numpy 是一个Python扩展库,专门做科学计算,也是大部分 Python 科学计算库的基础,Numpy 提供了多维数组对象 ndarray,它是一系列同类型数据的集合,可以进行索引.切片.迭代等操作. 我们可以使用以下命令进行安装: pip in

  • 初识python的numpy模块

    目录 一.array类型 1.1array类型的基本使用 1.2对更高维度数据的处理 1.3Numpy创建特殊类型的array类型 1.3.1生成全为0或全为1的array 1.3.2np.arrange()和np.linspace() 1.4Numpy基础计算演示 二.线性代数相关 三.矩阵的高级函数-随机数矩阵 四.总结 Numpy是Numerical Python extensions的缩写,字面意思是Python数值计算扩展.Numpy是python中众多机器学习库的依赖,这些库通过Nu

  • 利用Python NumPy库及Matplotlib库绘制数学函数图像

    目录 前言 NumPy与Matplotlib 函数绘图 所需库函数语法 导入所需模块 一元一次函数 一元二次函数 指数函数 正弦函数 余弦函数 高级玩法 总结 前言 最近开始学习数学了,有一些题目的函数图像非常有特点,有一些函数图像手绘比较麻烦,那么有没有什么办法做出又标准又好看的数学函数图像呢? 答案是有很多的,有很多不错的软件都能画出函数图像,但是,我想到了Python的数据可视化.Python在近些年非常火热,在数据分析以及深度学习等方面得到广泛地运用,其丰富的库使其功能愈加强大. 这里我

  • Python中Numpy的深拷贝和浅拷贝

    目录 1. 引言 2. 浅拷贝 2.1 问题引入 2.2 问题剖析 3. 深拷贝 3.1 举个栗子 3.2 探究原因 4. 技巧总结 4.1 判断是否指向同一内存 4.2 其他数据类型 5. 总结 1. 引言 深拷贝和浅拷贝是Python中重要的概念,本文重点介绍在NumPy中深拷贝和浅拷贝相关操作的定义和背后的原理.闲话少说,我们直接开始吧! 2. 浅拷贝 2.1 问题引入 我们来举个栗子,如下所示我们有两个数组a和b,样例代码如下: import numpy as np a = np.arr

  • Python的赋值、深拷贝与浅拷贝的区别详解

    在python中,给一个对象赋值,实际上就是对象对内存空间存储的值的引用.当我们把对象赋值给另一个变量的时候,这个变量并没有拷贝这个对象,而只是拷贝了这个对象的引用而已. 一般情况下我们会通过三种方法来实现拷贝对象的引用. Python直接赋值 直接赋值,默认浅拷贝传递对象的引用而已,原始列表改变,被赋值的变量也会做相同的改变.其实就是对'对象'的引用 示例: >>> list_demo = [2, 4, 6] >>> a = list_demo >>>

  • python中numpy.zeros(np.zeros)的使用方法

    翻译: 用法:zeros(shape, dtype=float, order='C') 返回:返回来一个给定形状和类型的用0填充的数组: 参数:shape:形状 dtype:数据类型,可选参数,默认numpy.float64 dtype类型: t ,位域,如t4代表4位 b,布尔值,true or false i,整数,如i8(64位) u,无符号整数,u8(64位) f,浮点数,f8(64位) c,浮点负数, o,对象, s,a,字符串,s24 u,unicode,u24 order:可选参数

  • python中numpy包使用教程之数组和相关操作详解

    前言 大家应该都有所了解,下面就简单介绍下Numpy,NumPy(Numerical Python)是一个用于科学计算第三方的Python包. NumPy提供了许多高级的数值编程工具,如:矩阵数据类型.矢量处理,以及精密的运算库.专为进行严格的数字处理而产生.下面本文将详细介绍关于python中numpy包使用教程之数组和相关操作的相关内容,下面话不多说,来一起看看详细的介绍: 一.数组简介 Numpy中,最重要的数据结构是:多维数组类型(numpy.ndarray) ndarray由两部分组成

  • Python中numpy模块常见用法demo实例小结

    本文实例总结了Python中numpy模块常见用法.分享给大家供大家参考,具体如下: import numpy as np arr = np.array([[1,2,3], [2,3,4]]) print(arr) print(type(arr)) print('number of dim:', arr.ndim) print('shape:', arr.shape) print('size:', arr.size) [[1 2 3]  [2 3 4]] number of dim: 2 sha

  • 基于Python中numpy数组的合并实例讲解

    Python中numpy数组的合并有很多方法,如 - np.append() - np.concatenate() - np.stack() - np.hstack() - np.vstack() - np.dstack() 其中最泛用的是第一个和第二个.第一个可读性好,比较灵活,但是占内存大.第二个则没有内存占用大的问题. 方法一--append parameters introduction arr 待合并的数组的复制(特别主页是复制,所以要多耗费很多内存) values 用来合并到上述数组

  • 浅析python中numpy包中的argsort函数的使用

    概述 argsort()函数在模块numpy.core.fromnumeric中. 在python中排序数组,或者获取排序顺序的时候,我们常常使用numpy包的argsort函数来完成. 如下图所示,是使用python获取到数组中的排序的顺序. data=numpy.array([1,2,3,4,5]) datasort=numpy.argsort(data) datasort Out[39]: array([0, 1, 2, 3, 4], dtype=int64) data Out[40]:

  • Python中Numpy ndarray的使用详解

    本文主讲Python中Numpy数组的类型.全0全1数组的生成.随机数组.数组操作.矩阵的简单运算.矩阵的数学运算. 尽管可以用python中list嵌套来模拟矩阵,但使用Numpy库更方便. 定义数组 >>> import numpy as np >>> m = np.array([[1,2,3], [2,3,4]]) #定义矩阵,int64 >>> m array([[1, 2, 3], [2, 3, 4]]) >>> m = n

  • Python中Numpy包的安装与使用方法简明教程

    本文实例讲述了Python中Numpy包的安装与使用方法.分享给大家供大家参考,具体如下: Numpy包的安装 准备工作 1. Python安装 2. pip安装(如使用pip安装命令:pip install numpy) 3. 将pip所在的文件夹添加到环境变量path路径中 4. 下载相应的Numpy安装包,.whl格式.下载链接. 以上准备工作准备完毕之后,进行Numpy安装,先进入whl安装包的存放目录.比如在C盘: cd C:\ 再使用命令行安装: pip install numpy文

  • python中numpy数组与list相互转换实例方法

    python的使用之所以方便,原因之一就是各种数据类型各样轻松的转换,例如numpy数组和list的相互转换,只需要函数方法的使用就可以处理.numpy数组使用numpy中的array()函数转换为list,list转使用tolist()方法转换为numpy数组,本文将向大家演示相互转换的过程. 1.numpy数组转list:使用numpy中的array()函数 np.array(a) array([ 3.234, 34. , 3.777, 6.33 ]) #转换后,可进行np.array的方法

随机推荐