numpy中ravel()与flatten()的区别
生活随笔
收集整理的這篇文章主要介紹了
numpy中ravel()与flatten()的区别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我在練習機器學習中梯度下降的編程學習中,需要扁平化一個array,我腦子中就出現了ravel()與flatten(),兩個扁平化的函數,他們倆的共功能相同,可是到底有什么區別呢。
先看看兩個函數的使用:
我們可以看到這兩個函數實現的功能一樣,但我們在平時使用的時候flatten()更為合適.在使用過程中flatten()分配了新的內存,但ravel()返回的是一個數組的視圖.視圖是數組的引用(說引用不太恰當,因為原數組和ravel()返回后的數組的地址并不一樣),在使用過程中應該注意避免在修改視圖時影響原本的數組.這是什么意思咧,我們通過代碼來具體解釋:
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數組都是扁平化后的數組,具有相同的內容 #但是我們修改c的時候,a中的數也發生了該改變 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]]綜上所述,在實際應用中應盡量使用flatten()函數,這樣避免意外的錯誤.
總結
以上是生活随笔為你收集整理的numpy中ravel()与flatten()的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中学生学科学习能力测评
- 下一篇: libwebsockets 记录