您好,登錄后才能下訂單哦!
這篇“Numpy數(shù)組的轉(zhuǎn)置和軸交換如何實現(xiàn)”文章的知識點大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Numpy數(shù)組的轉(zhuǎn)置和軸交換如何實現(xiàn)”文章吧。
NumPy 數(shù)組在進(jìn)行轉(zhuǎn)置時不會實際移動內(nèi)存中的任何數(shù)據(jù) 位置只是改變對原始矩陣的索引方式 ,比如我原來是行索引現(xiàn)在變?yōu)榱兴饕?/p>
轉(zhuǎn)置是一種視圖并不是對原數(shù)組的復(fù)制數(shù)組轉(zhuǎn)置擁有transpose方法,也有特殊的T屬性
對于numpy數(shù)組的轉(zhuǎn)置僅限于一維和二維數(shù)組,使用的是 numpy中的T 屬性
創(chuàng)建一個0-15的一維數(shù)組,并且對它進(jìn)行了數(shù)組重組,變?yōu)?2 x 2 x 4的三維數(shù)組,并對它進(jìn)行轉(zhuǎn)置
import numpy as np #創(chuàng)建一個三維數(shù)組,這個三維數(shù)組的形狀是 2 x 2 x 4 ,三維數(shù)組包括兩個二維數(shù)組,二維數(shù)組中包含兩個一維數(shù)組,一維數(shù)組的數(shù)組維度長度是 4 arr = np.arange(16) arr2 = arr.reshape(4,-1) arr3 = arr.T 0
我們通過數(shù)組的迭代來檢查numpy數(shù)組的轉(zhuǎn)置是否對原數(shù)組位置做了改變,這里我們要引用numpy.nditer() 方法
對原數(shù)組進(jìn)行迭代:
arr = np.arange(16) arr2 = arr.reshape(4,-1) for x in np.nditer(arr2): # 需要注意的是for循環(huán)的末尾一定要加上 冒號(:) print(x,end=" ")
我們對通過 arr2的轉(zhuǎn)置數(shù)組arr3做迭代
arr = np.arange(16) arr2 = arr.reshape(4,-1) arr3 = arr2.T for xx in np.nditer(arr3): print(xx,end=" ")
可以發(fā)現(xiàn)他們的打印結(jié)果未發(fā)生任何變化,所以可以證實,數(shù)組轉(zhuǎn)置并不是改變了原數(shù)組的元素位置,只是改變了它的索引方式。
其實我可以告訴你,一個最終結(jié)果,原數(shù)組和對原數(shù)組的轉(zhuǎn)置在內(nèi)存中是共享數(shù)據(jù)的,,類似于家里的小狗叫做旺旺 和小黃,其實指的是是一個東西
在這里需要注意的是,在數(shù)組轉(zhuǎn)置下對數(shù)組作修改一定會影響到原數(shù)組
例如:
arr = np.arange(10).reshape(2,5) arr2 = arr.T #為了方便理解我上述說的意思,我引用下面的實例 #對arr2中的某一數(shù)組作以修改 print(arr) # 原數(shù)組 arr2[2][1] = 200 #在原數(shù)組轉(zhuǎn)置后,對其中 某一個元素做修改 print(arr2) # 打印對原數(shù)組轉(zhuǎn)之后的數(shù)組 print(arr) #打印原數(shù)組
發(fā)現(xiàn)了什么我們最初定義的數(shù)組被篡改了,不知道大家對數(shù)組的轉(zhuǎn)置和原數(shù)組公用一個內(nèi)存位置的概念的理解是否變得容易
雖然,transpose方法可以實現(xiàn)轉(zhuǎn)置,但是它的真正用途是軸交換,我前面提到.T 方法只適合用于一二數(shù)組,三維,四維就要用到transpose()方法。
transpose() 方法中的參數(shù)和數(shù)組的維度有關(guān),拿三位數(shù)組來說共需要三個參數(shù)分別是,
transpose(x,y,z)其中的參數(shù)分別對應(yīng)0,1,2,只需要變換軸對應(yīng)數(shù)字參數(shù)的順序就可以將數(shù)組進(jìn)行軸的變換。
原數(shù)組對應(yīng)的參數(shù)順序是,transpose(0,1,2)
import numpy as np arr = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]]) print(arr) arr2 = arr.transpose((0,2,1)) #我在這里改變了列和縱深的順序 print(arr2)
經(jīng)過軸交換后arr數(shù)組打印結(jié)果
這一塊比較難于理解,我也是看了好久現(xiàn)在也是馬馬虎虎,我可以告訴大家一個比較笨的方法
請記住,(x,y,z)或者(0,1,2)分別代表行軸,列軸,縱深軸,transpose 方法是對它們的軸進(jìn)行了交換。
以上就是關(guān)于“Numpy數(shù)組的轉(zhuǎn)置和軸交換如何實現(xiàn)”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。