Numpy中扁平化函數(shù)ravel()和flatten()的區(qū)別詳解
在Numpy中經(jīng)常使用到的操作由扁平化操作,Numpy提供了兩個(gè)函數(shù)進(jìn)行此操作,他們的功能相同,但在內(nèi)存上有很大的不同.
先來(lái)看這兩個(gè)函數(shù)的使用:
from numpy import * a = arange(12).reshape(3,4) print(a) # [[ 0 ?1 ?2 ?3] # ?[ 4 ?5 ?6 ?7] # ?[ 8 ?9 10 11]] print(a.ravel()) # [ 0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9 10 11] print(a.flatten()) # [ 0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9 10 11]
可以看到這兩個(gè)函數(shù)實(shí)現(xiàn)的功能一樣,但我們?cè)谄綍r(shí)使用的時(shí)候flatten()更為合適.在使用過(guò)程中flatten()分配了新的內(nèi)存,但ravel()返回的是一個(gè)數(shù)組的視圖.視圖是數(shù)組的引用(說(shuō)引用不太恰當(dāng),因?yàn)樵瓟?shù)組和ravel()返回后的數(shù)組的地址并不一樣),在使用過(guò)程中應(yīng)該注意避免在修改視圖時(shí)影響原本的數(shù)組.這是什么意思咧,我們通過(guò)代碼來(lái)具體解釋:
from numpy import * a = arange(12).reshape(3,4) print(a) # [[ 0 ?1 ?2 ?3] # ?[ 4 ?5 ?6 ?7] # ?[ 8 ?9 10 11]] # 創(chuàng)建一個(gè)和a相同內(nèi)容的數(shù)組b b = a.copy() c = a.ravel() d = b.flatten() # 輸出c和d數(shù)組 print(c) # [ 0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9 10 11] print(d) # [ 0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9 10 11] # 可以看到c和d數(shù)組都是扁平化后的數(shù)組,具有相同的內(nèi)容 print(a is c) # False print(b is d) # False # 可以看到以上a,b,c,d是四個(gè)不同的對(duì)象 # 但因?yàn)閏是a的一種展示方式,雖然他們是不同的對(duì)象,但在修改c的時(shí)候,a中相應(yīng)的數(shù)也改變了 c[1] = 99 d[1] = 99 print(a) # [[ 0 99 ?2 ?3] # ?[ 4 ?5 ?6 ?7] # ?[ 8 ?9 10 11]] print(b) # [[ 0 ?1 ?2 ?3] # ?[ 4 ?5 ?6 ?7] # ?[ 8 ?9 10 11]] print(c) # [ 0 99 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9 10 11] print(d) # [ 0 99 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9 10 11]
通過(guò)以上的分析,在實(shí)際應(yīng)用中應(yīng)盡量使用flatten()函數(shù),這樣避免意外的錯(cuò)誤.
到此這篇關(guān)于Numpy中扁平化函數(shù)ravel()和flatten()的區(qū)別詳解的文章就介紹到這了,更多相關(guān)Numpy ravel()和flatten()內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
NumPy實(shí)現(xiàn)結(jié)構(gòu)化數(shù)組的示例代碼
結(jié)構(gòu)化數(shù)組是 NumPy 中用于處理異質(zhì)數(shù)據(jù)的重要工具,通過(guò)定義復(fù)雜的數(shù)據(jù)類型,我們可以創(chuàng)建具有不同字段的數(shù)組,本文主要介紹了NumPy實(shí)現(xiàn)結(jié)構(gòu)化數(shù)組的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01Python3自動(dòng)簽到 定時(shí)任務(wù) 判斷節(jié)假日的實(shí)例
今天小編就為大家分享一篇Python3自動(dòng)簽到 定時(shí)任務(wù) 判斷節(jié)假日的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-11-11推薦值得學(xué)習(xí)的12款python-web開(kāi)發(fā)框架
這篇文章主要介紹了值得學(xué)習(xí)的12款python-web開(kāi)發(fā)框架,幫助大家更好的理解和學(xué)習(xí)Python web開(kāi)發(fā),感興趣的朋友可以了解下2020-08-08Python進(jìn)程池Pool應(yīng)用實(shí)例分析
這篇文章主要介紹了Python進(jìn)程池Pool應(yīng)用,結(jié)合實(shí)例形式分析了Python進(jìn)程池Pool功能、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-11-11python鏈接oracle數(shù)據(jù)庫(kù)以及數(shù)據(jù)庫(kù)的增刪改查實(shí)例
下面小編就為大家分享一篇python鏈接oracle數(shù)據(jù)庫(kù)以及數(shù)據(jù)庫(kù)的增刪改查實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-01-01Python Requests.post()請(qǐng)求失敗時(shí)的retry設(shè)置方式
這篇文章主要介紹了Python Requests.post()請(qǐng)求失敗時(shí)的retry設(shè)置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08深入理解NumPy簡(jiǎn)明教程---數(shù)組3(組合)
本篇文章對(duì)NumPy數(shù)組進(jìn)行較深入的探討。首先介紹自定義類型的數(shù)組,接著數(shù)組的組合,最后介紹數(shù)組復(fù)制方面的問(wèn)題,有興趣的可以了解一下。2016-12-12解決ModuleNotFoundError: No module named ‘
這篇文章主要介紹了解決ModuleNotFoundError: No module named ‘flask._compat的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06