numpy中ravel()与flatten()的区别
生活随笔
收集整理的這篇文章主要介紹了
numpy中ravel()与flatten()的区别
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
我在練習(xí)機(jī)器學(xué)習(xí)中梯度下降的編程學(xué)習(xí)中,需要扁平化一個(gè)array,我腦子中就出現(xiàn)了ravel()與flatten(),兩個(gè)扁平化的函數(shù),他們倆的共功能相同,可是到底有什么區(qū)別呢。
先看看兩個(gè)函數(shù)的使用:
我們可以看到這兩個(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)具體解釋:
a = arange(12).reshape(3,4) b=a.copy() c=a.ravel() d=a.flatten() 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)容 #但是我們修改c的時(shí)候,a中的數(shù)也發(fā)生了該改變 c[1] = 999999 d[1] = 999999 print(a) # [[ 0 999999 2 3] # [ 4 5 6 7] # [ 8 9 10 11]] print(b) # [[ 0 1 2 3] # [ 4 5 6 7] # [ 8 9 10 11]]綜上所述,在實(shí)際應(yīng)用中應(yīng)盡量使用flatten()函數(shù),這樣避免意外的錯(cuò)誤.
總結(jié)
以上是生活随笔為你收集整理的numpy中ravel()与flatten()的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 中学生学科学习能力测评
- 下一篇: libwebsockets 记录