日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

Numpy中扁平化函數(shù)ravel()和flatten()的區(qū)別詳解_python

作者:weller ? 更新時(shí)間: 2023-05-23 編程語言

在Numpy中經(jīng)常使用到的操作由扁平化操作,Numpy提供了兩個(gè)函數(shù)進(jìn)行此操作,他們的功能相同,但在內(nè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()更為合適.在使用過程中flatten()分配了新的內(nèi)存,但ravel()返回的是一個(gè)數(shù)組的視圖.視圖是數(shù)組的引用(說引用不太恰當(dāng),因?yàn)樵瓟?shù)組和ravel()返回后的數(shù)組的地址并不一樣),在使用過程中應(yīng)該注意避免在修改視圖時(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)建一個(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]

通過以上的分析,在實(shí)際應(yīng)用中應(yīng)盡量使用flatten()函數(shù),這樣避免意外的錯(cuò)誤.

原文鏈接:https://www.cnblogs.com/mzct123/p/8659193.html

  • 上一篇:沒有了
  • 下一篇:沒有了
欄目分類
最近更新