iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python numpy视图与副本怎么理解
  • 416
分享到

Python numpy视图与副本怎么理解

2023-06-28 23:06:51 416人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

本篇文章给大家分享的是有关python numpy视图与副本怎么理解,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。前言:下面对 ndarray 内存结构主要分为两部分

本篇文章给大家分享的是有关python numpy视图与副本怎么理解,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

前言:

下面对 ndarray 内存结构主要分为两部分:

Python numpy视图与副本怎么理解

metdata :存放数组类型dtype、数组维度ndim、维度数量shape、维间距strides等
raw bata:存放原始数据data

metdata 中包含着关于数组相关信息,可以帮助我们在数组ndarray中快速索引和解释指定的数据

除此了对数组进行索引操作外,也会对数组的原数据进行类似与之前“拷贝”操作。

众所周知,在 Python 中大家应该对深浅拷贝有一定的印象吧,在 numpy 中则换成了“视图”与“副本”的概念了。

相信大家和我一样对此存在疑问,十万个为什么涌上心头了,“视图是什么?”,“什么是副本?”

因此,我们一起来学习 numpy 模块中比较新奇的概念视图与副本,Let's Go~

1. 简单讲解

我们之前在学习 Python 赋值、深浅拷贝时,在代码添加中对比两个对象的地址id()是否一致。

同理,按照这样的思路,numpy 中也可以对比两个数组地址是否一样。

同时,在 numpy 数组对象ndarray 也提供许多字段,方便让我们进一步地查看数组内部的差异

ndarray.flags : 查看数组存储策略、读写权限、对象等

  • C_CONTIGUOUS (C) 行优先存储

  • F_CONTIGUOUS 列优先存储

  • OWNDATA 数据所有者

  • WRITEABLE 编写权限

  • ALIGNED 数据元素与硬件指针对齐

  • WRITEBACKIFCOPY 数组是其他数组的副本

  • UPDATEIFCOPY 已弃用

注:flags 相关属性名称可以单独调用例如 flags.writeable

  • ndarray.base : 查看数组中的元素是否来自其他数组

  • ndarray.nbytes: 查看数组中数据占用的字节数

  • getsizeof(item): 查看数组占用的内存空点

介绍完上述指标,我们来小试一下:

>>> import numpy as np>>> a = np.array([1,2,3,4])>>> print(a[1:3])[2 3]>>> print(a[[1,2]])[2 3]>>>

查看a[1:3] 与 a[[1,2]] 内存地址,它们俩位置不一样,a[[1,2]]意味发生了深拷贝本(副本),a[1:3] 是原数组a引用(视图)

>>> print(id(a[1:3]))2247482965008>>> print(id(a[[1,2]]))2247482964928

查看ndarray.owndata 属性,发现a[1:3] 数据来自a数组的,而a[[1,2]]是自身数据的

>>> print(a.flags.owndata)True>>> print(a[1:3].flags.owndata)False>>> print(a[[1,2]].flags.owndata)True

我们在看一下 ndarray.base 属性,果真印证了使用flags.owndata 查询的结果,a[1:3] 不是数据所有者,而数据来源数组a;

a[[1,2]] 是数据所有者,数据来源本身(None)

>>> print(a[[1,2]].base)None>>> print(a[1:3].base)[1 2 3 4]

2. 视图

视图概念

我们通过上述简单例子,可以知道 a[1:3] 不是数据所有者,数据来源于对数组a的引用(浅拷贝)。

因此,我们应该对视图有了基本的认识了,看一下官方怎么描述视图的

No copy at All。 Simple assignments make no copy of objects or their data.

视图,是对原数组进行引用拷贝,共享原始数组的数据。

视图应用

视图在numpy中广泛使用,视图一般产生有两种场景:

  • 当对原始数组进行引用时

  • 当自身无数据,与原数组共享数据时

>>> import numpy as np>>> a = np.array([1,2,3,4])>>> b = a>>> b is aTrue>>> id(a)2247207679680>>> id(b)2247207679680>>>

我们可以看到 a 与 b 是 同享同一个数据空间的

numpy 模块诸如索引、切片、函数view(),reshape()等返回视图结果

>>> arr = np.arange(10)>>> arr_view = arr.view()>>> arr.shape = (2,5)>>> arr_reshape = arr.reshape(5,2)# ndarray.base 属性>>> print(arr.base)None>>> print(arr_view.base)[[0 1 2 3 4] [5 6 7 8 9]]>>> print(arr_reshape.base)[[0 1 2 3 4] [5 6 7 8 9]]# ndarray.flags.owndata 属性>>> print(arr.flags.owndata)True>>> print(arr_view.flags.owndata)False>>> print(arr_reshape.flags.owndata)False>>>

Python numpy视图与副本怎么理解

视图优点

在 numpy 中 视图可以创建的对象可以节省内存空间,并且无需复制,提高查询速度

在视图中,创建的对象如果修改数据,原始数据也被修改。

3. 副本

副本概念

副本是对原数组进行完整拷贝(数据地址也会拷贝新的),与原始数组完全独立,相对于“深拷本”,不与原始数组共享数据。

同样截取官网,对副本的描述:

Deep Copy The copy method makes a complete copy of the array and its data

当改变副本的数据元素值时,虽然改变了副本与原数组相互独立,原始数组中元素值不会发生改变。

副本应用

  • 当进行切片操作时

  • 当需要与原始数组数据独立时

副本的实现我们可以直接使用 ndarray.copy()方法对原数组进行深拷贝

b = np.array([2,5,7])c = b.copy()c[1] = 8print("b:",b)print("c:",c)print("c is b:",c is b)# 查看 ndarray.base 属性åprint("b.base:",b.base)print("c.base:",c.base)# 查看 ndarray.flags.owndataprint("b.flags.owndata:",b.flags.owndata)print("c.flags.owndata:",c.flags.owndata)

Python numpy视图与副本怎么理解

Python numpy视图与副本怎么理解

我们对 numpy 模块中重要的概念视图和副本。

  • 视图,相当于浅拷贝,与原数组共享数据。

  • 副本,相当于深拷贝,与原数组数据相互独立

我们可以通过内存地址id()方法,同时借助ndarray.base、ndarray.flags来进一步分析区别

以上就是Python numpy视图与副本怎么理解,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网Python频道。

--结束END--

本文标题: Python numpy视图与副本怎么理解

本文链接: https://www.lsjlt.com/news/321266.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python numpy视图与副本怎么理解
    本篇文章给大家分享的是有关Python numpy视图与副本怎么理解,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。前言:下面对 ndarray 内存结构主要分为两部分...
    99+
    2023-06-28
  • Python numpy视图与副本
    目录1. 简单讲解2. 视图视图概念视图应用视图优点3. 副本副本概念副本应用前言: 继上一篇对numpy 模块之ndarray一文中对 ndarray 内存结构主要分为两部分: ...
    99+
    2024-04-02
  • MongoDB中怎么管理副本集
    这期内容当中小编将会给大家带来有关MongoDB中怎么管理副本集,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。 1)诊断副本集中的机器,可以...
    99+
    2024-04-02
  • Android文本与视图基本操作梳理介绍
    目录目录文件说明一、设置文本内容1、在layout文件下新建一个xml文件2、配置XML文件设置文本3、string文件内容4、java类调用二、设置文本的大小三、设置文本颜色四、设...
    99+
    2024-04-02
  • Oracle物化视图管理及重要视图怎么理解
    这篇文章主要讲解了“Oracle物化视图管理及重要视图怎么理解”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Oracle物化视图管理及重要视图怎么理解”吧!...
    99+
    2024-04-02
  • windows7副本不是正版该怎么办windows7副本不是正版解决方案
    windows7副本不是正版该怎么办此难题经常会出现在用户人群中,由于绝大多数用户的win7并不是正版系统,反而是通过改动的系统软件,因而用户们使用一段时间后系统软件会提醒这个情况,那样碰到了该状况的情况下此软件处理呢,接下来就告诉大家有关...
    99+
    2023-07-24
  • 怎么在Python中使用numpy处理图片
    怎么在Python中使用numpy处理图片?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。python主要应用领域有哪些1、云计算,典型应用OpenStack。2、WEB前端...
    99+
    2023-06-14
  • mongodb副本集同步问题怎么解决
    解决MongoDB副本集同步问题可以通过以下几种方式:1. 检查网络连接:确保主节点和副本节点之间的网络连接良好,避免网络问题导致同...
    99+
    2023-08-24
    mongodb
  • Python图像处理之图像与视频处理基础教程
    目录图像与视频处理基础0. 前言1. 在 3D 空间中显示 RGB 图像颜色通道1.1 图像表示1.2 在 3D 空间中绘制颜色通道2. 使用 scikit-video 读/写视频文...
    99+
    2023-05-15
    Python图像处理 Python图像与视频处理 Python视频处理
  • PL/SQL中的视图与物化视图怎么应用
    在PL/SQL中,视图和物化视图是用来简化和优化查询的工具。视图是一个虚拟表,可以像普通表一样被查询,但实际上并不存储任何数据,而是...
    99+
    2024-05-08
    PL/SQL
  • 怎么理解mysql联合表及视图
    本篇内容介绍了“怎么理解mysql联合表及视图”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1)验证环境 ...
    99+
    2024-04-02
  • MongoDB的副本集与自动故障转移怎么配置
    在MongoDB中配置副本集和自动故障转移需要以下步骤: 配置副本集的成员:打开MongoDB配置文件(通常是mongod.con...
    99+
    2024-05-07
    MongoDB
  • Python怎么实现视频分解成图片及图片合成视频
    这篇文章主要介绍了Python怎么实现视频分解成图片及图片合成视频的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python怎么实现视频分解成图片及图片合成视频文章都会有所收获,下面我们一起来看看吧。一、pyt...
    99+
    2023-06-29
  • 怎么解析python二叉树的右视图
    这篇文章给大家介绍怎么解析python二叉树的右视图,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。二叉树的右视图题目描述给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。示例:输...
    99+
    2023-06-19
  • Python Django通用视图和错误视图怎么使用
    本文小编为大家详细介绍“Python Django通用视图和错误视图怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python Django通用视图和错误视图怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路...
    99+
    2023-07-06
  • 此windows副本不是正版问题怎么解决
    这篇“此windows副本不是正版问题怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇...
    99+
    2023-04-14
    windows
  • win7显示此windows副本不是正版怎么解决
    有的朋友在打开电脑的时候,看到win7系统右下角显示此windows副本不是正版的情况,那么win7显示此windows副本不是正版是怎么回事呢?win7不是正版怎么解决呢?一些朋友对系统不了解,所以处理起来比较举手无措,下面我们就来看看w...
    99+
    2023-07-18
  • python之Numpy与Pandas怎么应用
    这篇文章主要介绍了python之Numpy与Pandas怎么应用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python之Numpy与Pandas怎么应用文章都会有所收获,下面我们一起来看看吧。1 Numpy...
    99+
    2023-07-02
  • ASP.NET MVC 3中如何理解控制器与视图
    本篇文章给大家分享的是有关ASP.NET MVC 3中如何理解控制器与视图,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。I:控制器和视图的基础概念控制器的概念控制器在ASP.N...
    99+
    2023-06-17
  • opencv-python基本图像处理详解
    目录一、使用matplotlib显示图1、显示热量图 2、显示灰度图二、使用cv.imread显示图像1、显示灰度图像总结一、使用matplotlib显示图 impor...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作