日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

【Python】NumPy 中 ravel() 正确打开方式

發(fā)布時(shí)間:2023/12/20 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Python】NumPy 中 ravel() 正确打开方式 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

【Python】NumPy 中 ravel() 正確打開方式

最近在看書時(shí),對(duì)numpy的ravel()的有些疑惑,書上這樣寫到“如果結(jié)果中的值在原始數(shù)組中是連續(xù)的,則ravel 不會(huì)生成底層數(shù)值的副本”,度娘后,發(fā)現(xiàn)大部分的說(shuō)法都是得到原數(shù)組的視圖,但是按照書上的說(shuō)法,是可以產(chǎn)生副本的,只要結(jié)果的值在原始數(shù)組中不連續(xù)。

剛開始不太理解,這里所謂的連續(xù)是指什么?后來(lái)發(fā)現(xiàn),這個(gè)連續(xù)是指的是元素順序,reval()中有個(gè)參數(shù)【order】,這個(gè)參數(shù)指定了重塑順序。

In [58]: arr2 Out[58]: array([[ 1, 1, -1],[ 0, -3, 6]]) # arr2 默認(rèn)安裝C順序展開 In [59]: arr3 = np.ravel(arr2,order = 'C') # C順序,即是按行方向順序 In [60]: arr3 Out[60]: array([ 1, 1, -1, 0, -3, 6]) # arr2,arr3都是按照C順序展開 In [72]: arr3.base is arr2 # arr3基于arr2 Out[72]: True In [73]: np.may_share_memory(arr2,arr3) # arr3,arr2共享內(nèi)存,則arr3為arr2的視圖 Out[73]: True In [62]: arr4 = np.ravel(arr2,order = 'F') #arr4 按照F順序,即是列順序重塑 In [63]: arr4 Out[63]: array([ 1, 0, 1, -3, -1, 6]) #可以看出順序與arr2的不同 In [64]: arr4.base is arr2 #arr4 不是基于arr2 Out[64]: False In [65]: np.may_share_memory(arr2,arr4) #arr4,arr2 不共享內(nèi)存 Out[65]: False In [74]: arr4.flags.owndata #arr4擁有自己的數(shù)據(jù),說(shuō)明獨(dú)立于arr2,是一個(gè)副本 Out[74]: True In [66]: arr5 = np.ravel(arr2.T, order='A') #A順序,應(yīng)該是針對(duì)于轉(zhuǎn)置后的重塑 In [67]: arr5 Out[67]: array([ 1, 1, -1, 0, -3, 6]) #得到結(jié)果順序與arr2的一致,也是C順序 In [68]: np.may_share_memory(arr2,arr5) # arr5,arr2共享內(nèi)存,則arr5為arr2的視圖 Out[68]: True In [69]: arr6 = np.ravel(arr2.swapaxes(0,1), order='K') #A順序,應(yīng)該是針對(duì)于軸交換后的重塑 In [70]: arr6 Out[70]: array([ 1, 1, -1, 0, -3, 6]) #得到結(jié)果順序與arr2的一致,也是C順序 In [71]: np.may_share_memory(arr2,arr6) # arr6,arr2共享內(nèi)存,則arr6為arr2的視圖 Out[71]: True

所以ravel()的結(jié)果不一定就是原數(shù)組的視圖,這個(gè)要看具體的情況,不過一般重塑都是使用默認(rèn)的order參數(shù),按照C順序重塑,但是使用時(shí)也要注意,避免錯(cuò)把視圖當(dāng)做副本,修改視圖影響原本的數(shù)組。
或者直接使用flatten(),不管參數(shù)【order】如何都是,返回一份拷貝,對(duì)拷貝所做的修改不會(huì)影響(reflects)原始數(shù)組,
最后,也可以通過reshape(-1)使原多維數(shù)組轉(zhuǎn)化為一維數(shù)組,reshape(x, y)使其轉(zhuǎn)化為其他形狀,不過注意使用reshape()都是返回原始數(shù)組的視圖。

總結(jié)下,
1,reshape() 返回原始數(shù)組的視圖;
2,ravel() 返回原始數(shù)據(jù)的視圖或者副本,只有在參數(shù)order = ‘F’時(shí)返回副本;
3,flatten() 返回原始數(shù)組的副本;

以上有錯(cuò)誤的,可以評(píng)論指出,拍磚!!!

總結(jié)

以上是生活随笔為你收集整理的【Python】NumPy 中 ravel() 正确打开方式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。