最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python?numpy視圖與副本

 更新時(shí)間:2022年01月24日 09:40:30   作者:盆友圈的小可愛  
這篇文章主要介紹了Python?numpy視圖與副本,繼上一篇對(duì)numpy?模塊之ndarray一文中對(duì)?ndarray?內(nèi)存結(jié)構(gòu)主要分為兩部分metdata?、raw?bata,下面來一起學(xué)習(xí)文章具體內(nèi)容吧,需要的小伙伴也可以參考一下

前言:

繼上一篇對(duì)numpy 模塊之ndarray一文中對(duì) ndarray 內(nèi)存結(jié)構(gòu)主要分為兩部分:

metdata :存放數(shù)組類型dtype、數(shù)組維度ndim、維度數(shù)量shape、維間距strides等
raw bata:存放原始數(shù)據(jù)data

metdata 中包含著關(guān)于數(shù)組相關(guān)信息,可以幫助我們?cè)跀?shù)組ndarray中快速索引和解釋指定的數(shù)據(jù)

除此了對(duì)數(shù)組進(jìn)行索引操作外,也會(huì)對(duì)數(shù)組的原數(shù)據(jù)進(jìn)行類似與之前“拷貝”操作。

眾所周知,在 Python 中大家應(yīng)該對(duì)深淺拷貝有一定的印象吧,在 numpy 中則換成了“視圖”與“副本”的概念了。

相信大家和我一樣對(duì)此存在疑問,十萬個(gè)為什么涌上心頭了,“視圖是什么?”,“什么是副本?”

因此,本期我們一起來學(xué)習(xí) numpy 模塊中比較新奇的概念視圖與副本,Let's go~

1. 簡單講解

我們之前在學(xué)習(xí) Python 賦值、深淺拷貝時(shí),在代碼添加中對(duì)比兩個(gè)對(duì)象的地址id()是否一致。

同理,按照這樣的思路,numpy 中也可以對(duì)比兩個(gè)數(shù)組地址是否一樣。

同時(shí),在 numpy 數(shù)組對(duì)象ndarray 也提供許多字段,方便讓我們進(jìn)一步地查看數(shù)組內(nèi)部的差異

ndarray.flags : 查看數(shù)組存儲(chǔ)策略、讀寫權(quán)限、對(duì)象等

  • C_CONTIGUOUS (C) 行優(yōu)先存儲(chǔ)
  • F_CONTIGUOUS 列優(yōu)先存儲(chǔ)
  • OWNDATA 數(shù)據(jù)所有者
  • WRITEABLE 編寫權(quán)限
  • ALIGNED 數(shù)據(jù)元素與硬件指針對(duì)齊
  • WRITEBACKIFCOPY 數(shù)組是其他數(shù)組的副本
  • UPDATEIFCOPY 已棄用

注:flags 相關(guān)屬性名稱可以單獨(dú)調(diào)用例如 flags.writeable

  • ndarray.base : 查看數(shù)組中的元素是否來自其他數(shù)組
  • ndarray.nbytes: 查看數(shù)組中數(shù)據(jù)占用的字節(jié)數(shù)
  • getsizeof(item): 查看數(shù)組占用的內(nèi)存空點(diǎn)

介紹完上述指標(biāo),我們來小試一下:

>>> 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]] 內(nèi)存地址,它們倆位置不一樣,a[[1,2]]意味發(fā)生了深拷貝本(副本),a[1:3] 是原數(shù)組a引用(視圖)

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

查看ndarray.owndata 屬性,發(fā)現(xiàn)a[1:3] 數(shù)據(jù)來自a數(shù)組的,而a[[1,2]]是自身數(shù)據(jù)的

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

我們?cè)诳匆幌?ndarray.base 屬性,果真印證了使用flags.owndata 查詢的結(jié)果,a[1:3] 不是數(shù)據(jù)所有者,而數(shù)據(jù)來源數(shù)組a;

a[[1,2]] 是數(shù)據(jù)所有者,數(shù)據(jù)來源本身(None)

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

2. 視圖

視圖概念

我們通過上述簡單例子,可以知道 a[1:3] 不是數(shù)據(jù)所有者,數(shù)據(jù)來源于對(duì)數(shù)組a的引用(淺拷貝)。

因此,我們應(yīng)該對(duì)視圖有了基本的認(rèn)識(shí)了,看一下官方怎么描述視圖的

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

視圖,是對(duì)原數(shù)組進(jìn)行引用拷貝,共享原始數(shù)組的數(shù)據(jù)。

視圖應(yīng)用

視圖在numpy中廣泛使用,視圖一般產(chǎn)生有兩種場(chǎng)景:

  • 當(dāng)對(duì)原始數(shù)組進(jìn)行引用時(shí)
  • 當(dāng)自身無數(shù)據(jù),與原數(shù)組共享數(shù)據(jù)時(shí)
>>> import numpy as np
>>> a = np.array([1,2,3,4])
>>> b = a
>>> b is a
True
>>> id(a)
2247207679680
>>> id(b)
2247207679680
>>>

我們可以看到 a 與 b 是 同享同一個(gè)數(shù)據(jù)空間的

numpy 模塊諸如索引、切片、函數(shù)view(),reshape()等返回視圖結(jié)果

>>> 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
>>>

視圖優(yōu)點(diǎn)

在 numpy 中 視圖可以創(chuàng)建的對(duì)象可以節(jié)省內(nèi)存空間,并且無需復(fù)制,提高查詢速度

在視圖中,創(chuàng)建的對(duì)象如果修改數(shù)據(jù),原始數(shù)據(jù)也被修改。

3. 副本

副本概念

副本是對(duì)原數(shù)組進(jìn)行完整拷貝(數(shù)據(jù)地址也會(huì)拷貝新的),與原始數(shù)組完全獨(dú)立,相對(duì)于“深拷本”,不與原始數(shù)組共享數(shù)據(jù)。

同樣截取官網(wǎng),對(duì)副本的描述:

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

當(dāng)改變副本的數(shù)據(jù)元素值時(shí),雖然改變了副本與原數(shù)組相互獨(dú)立,原始數(shù)組中元素值不會(huì)發(fā)生改變。

副本應(yīng)用

  • 當(dāng)進(jìn)行切片操作時(shí)
  • 當(dāng)需要與原始數(shù)組數(shù)據(jù)獨(dú)立時(shí)

副本的實(shí)現(xiàn)我們可以直接使用 ndarray.copy()方法對(duì)原數(shù)組進(jìn)行深拷貝

b = np.array([2,5,7])

c = b.copy()

c[1] = 8

print("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.owndata
print("b.flags.owndata:",b.flags.owndata)
print("c.flags.owndata:",c.flags.owndata)

image.png

image.png

總結(jié):

本期,我們對(duì) numpy 模塊中重要的概念視圖和副本。

  • 視圖,相當(dāng)于淺拷貝,與原數(shù)組共享數(shù)據(jù)。
  • 副本,相當(dāng)于深拷貝,與原數(shù)組數(shù)據(jù)相互獨(dú)立

我們可以通過內(nèi)存地址id()方法,同時(shí)借助ndarray.base、ndarray.flags來進(jìn)一步分析區(qū)別

到此這篇關(guān)于Python numpy視圖與副本的文章就介紹到這了,更多相關(guān)Python numpy視圖與副本內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python3讀取圖片并灰度化圖片的四種方法(OpenCV、PIL.Image、TensorFlow方法)總結(jié)

    python3讀取圖片并灰度化圖片的四種方法(OpenCV、PIL.Image、TensorFlow方法)總結(jié)

    這篇文章主要介紹了python3讀取圖片并灰度化圖片的四種方法(OpenCV、PIL.Image、TensorFlow方法)總結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Python PyPDF2模塊安裝使用解析

    Python PyPDF2模塊安裝使用解析

    這篇文章主要介紹了Python PyPDF2模塊安裝使用解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • python數(shù)據(jù)庫編程 ODBC方式實(shí)現(xiàn)通訊錄

    python數(shù)據(jù)庫編程 ODBC方式實(shí)現(xiàn)通訊錄

    這篇文章主要為大家詳細(xì)介紹了python數(shù)據(jù)庫編程,ODBC方式實(shí)現(xiàn)通訊錄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • Matplotlib繪圖基礎(chǔ)之文本標(biāo)注詳解

    Matplotlib繪圖基礎(chǔ)之文本標(biāo)注詳解

    Matplotlib?文本和標(biāo)注可以為數(shù)據(jù)和圖形之間提供額外的信息,幫助觀察者更好地理解數(shù)據(jù)和圖形的含義,下面就將通過示例依次介紹文本和標(biāo)注的常用使用方式
    2023-08-08
  • Python打印九九乘法表的5種方式代碼示例

    Python打印九九乘法表的5種方式代碼示例

    在Python中打印99乘法表的方法有很多種,比如for-for、while-while、while-for等,這篇文章主要給大家介紹了關(guān)于Python打印九九乘法表的5種方式,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-04-04
  • Python+OpenCV實(shí)現(xiàn)角度測(cè)量的示例代碼

    Python+OpenCV實(shí)現(xiàn)角度測(cè)量的示例代碼

    本文介紹如何使用python語言實(shí)現(xiàn)角度測(cè)量,程序包括鼠標(biāo)選點(diǎn)、直線斜率計(jì)算、角度計(jì)算三個(gè)子程序和一個(gè)主程序,感興趣的可以了解一下
    2022-03-03
  • Python3-異步進(jìn)程回調(diào)函數(shù)(callback())介紹

    Python3-異步進(jìn)程回調(diào)函數(shù)(callback())介紹

    這篇文章主要介紹了Python3-異步進(jìn)程回調(diào)函數(shù)(callback())介紹,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • python中的Numpy二維數(shù)組遍歷與二維數(shù)組切片后遍歷效率比較

    python中的Numpy二維數(shù)組遍歷與二維數(shù)組切片后遍歷效率比較

    這篇文章主要介紹了python中的Numpy二維數(shù)組遍歷與二維數(shù)組切片后遍歷效率比較,在python-numpy使用中,可以用雙層?for循環(huán)對(duì)數(shù)組元素進(jìn)行訪問,也可以切片成每一行后進(jìn)行一維數(shù)組的遍歷,下面小編擊來舉例介紹吧,需要的朋友可以參考一下
    2022-03-03
  • python中的__init__ 、__new__、__call__小結(jié)

    python中的__init__ 、__new__、__call__小結(jié)

    這篇文章主要介紹了python中的__init__ 、__new__、__call__小結(jié),需要的朋友可以參考下
    2014-04-04
  • Python3中多線程編程的隊(duì)列運(yùn)作示例

    Python3中多線程編程的隊(duì)列運(yùn)作示例

    這篇文章主要介紹了Python3中多線程編程的隊(duì)列運(yùn)作示例,文中用一個(gè)簡單的例子展示了Python下嘗試多線程時(shí)隊(duì)列的進(jìn)站出站是如何運(yùn)作的,需要的朋友可以參考下
    2015-04-04

最新評(píng)論

灵台县| 白山市| 寻甸| 台江县| 永吉县| 清河县| 会东县| 邻水| 盱眙县| 鲁甸县| 东明县| 施秉县| 肃宁县| 惠来县| 乌拉特前旗| 永新县| 兴宁市| 行唐县| 上蔡县| 固原市| 苗栗市| 天镇县| 尚志市| 墨脱县| 满洲里市| 巴马| 翁源县| 邮箱| 凉城县| 新民市| 襄城县| 宜良县| 庄河市| 扎赉特旗| 中超| 徐汇区| 繁峙县| 时尚| 小金县| 错那县| 新余市|