Numpy中扁平化函數(shù)ravel()和flatten()的區(qū)別詳解
在Numpy中經(jīng)常使用到的操作由扁平化操作,Numpy提供了兩個函數(shù)進行此操作,他們的功能相同,但在內(nèi)存上有很大的不同.
先來看這兩個函數(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]
可以看到這兩個函數(shù)實現(xiàn)的功能一樣,但我們在平時使用的時候flatten()更為合適.在使用過程中flatten()分配了新的內(nèi)存,但ravel()返回的是一個數(shù)組的視圖.視圖是數(shù)組的引用(說引用不太恰當,因為原數(shù)組和ravel()返回后的數(shù)組的地址并不一樣),在使用過程中應該注意避免在修改視圖時影響原本的數(shù)組.這是什么意思咧,我們通過代碼來具體解釋:
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)建一個和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是四個不同的對象 # 但因為c是a的一種展示方式,雖然他們是不同的對象,但在修改c的時候,a中相應的數(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]
通過以上的分析,在實際應用中應盡量使用flatten()函數(shù),這樣避免意外的錯誤.
到此這篇關于Numpy中扁平化函數(shù)ravel()和flatten()的區(qū)別詳解的文章就介紹到這了,更多相關Numpy ravel()和flatten()內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
python中dtypes和type()函數(shù)的區(qū)別示例詳解
type()是python內(nèi)置的函數(shù),type()返回數(shù)據(jù)結構類型(list、dict、numpy.ndarray 等),dtype返回數(shù)據(jù)元素的數(shù)據(jù)類型(int、float等),這篇文章主要給大家介紹了關于python中dtypes和type()函數(shù)區(qū)別的相關資料,需要的朋友可以參考下2024-03-03
將PyTorch?Tensor轉(zhuǎn)換為Python列表的三種方法
本文介紹了三種將PyTorch Tensor轉(zhuǎn)換為Python列表的方法,推薦使用.tolist()方法,適用于任何維度的Tensor,自動處理CPU/GPU轉(zhuǎn)換且性能更優(yōu),同時提到了注意事項,.list()僅適用于一維Tensor,轉(zhuǎn)換后的列表元素保持原有的數(shù)據(jù)類型2026-04-04
教你用Django將前端的數(shù)據(jù)存入Mysql數(shù)據(jù)庫
這篇文章主要給大家介紹了關于如何用Django將前端的數(shù)據(jù)存入Mysql數(shù)據(jù)庫的相關資料,文中通過圖文以及示例代碼介紹的非常詳細,對大家學習或者使用Django具有一定的參考學習價值,需要的朋友可以參考下2021-11-11
Python函數(shù)式編程之面向過程面向?qū)ο蠹昂瘮?shù)式簡析
這一番我們要學習點有難度的了,因此將降低閱讀與理解難度,盡量采用大白話為你鋪墊,因為涉及的一些概念也是借鑒的其它編程語言的風格,而且實際落地中存在部分爭議不過多學一點,總是沒有壞處的2021-09-09

