對python 矩陣轉(zhuǎn)置transpose的實例講解
在讀圖片時,會用到這么的一段代碼:
image_vector_len = np.prod(image_size)#總元素大小,3*55*47 img = Image.open(path) arr_img = np.asarray(img, dtype='float64') arr_img = arr_img.transpose(2,0,1).reshape((image_vector_len, ))# 47行,55列,每個點有3個元素rgb。再把這些元素一字排開
transpose是什么意識呢? 看如下例子:
arr1 = array([[[ 0, 1, 2, 3], [ 4, 5, 6, 7]], [[ 8, 9, 10, 11], [12, 13, 14, 15]]])
這是原來的矩陣。如果對其進(jìn)行轉(zhuǎn)置,執(zhí)行arr2 = arr1.transpose((1,0,2))
得到:
array([[[ 0, 1, 2, 3], [ 8, 9, 10, 11]], [[ 4, 5, 6, 7], [12, 13, 14, 15]]])
過程是怎樣的?
arr1.shape 應(yīng)該是(2, 2, 4) 意為 2維,2*4矩陣
arr1.transpose(*args) 里面的參數(shù),可以這么理解,他是調(diào)換arr1.shape的順序,咱來給arr1.shape標(biāo)一下角標(biāo)哈,(2[0], 2[1], 4[2]) [ ] 里是shape的索引,對吧,
transpose((1, 0, 2)) 的意思是 按照這個順序 重新設(shè)置shape 也就是 (2[1], 2[0], 4[2])
雖然看起來 變換前后的shape都是 2,2,4 , 但是問題來了,transpose是轉(zhuǎn)置
shape按照(1,0,2)的順序重新設(shè)置了, array里的所有元素 也要按照這個規(guī)則重新組成新矩陣
比如 8 在arr1中的索引是 (1, 0, 0) 那么按照剛才的變換規(guī)則,就是 (0, 1, 0) 看看跟你結(jié)果arr2的位置一樣了吧,依此類推..
另外一個知識點:
對于一維的shape,轉(zhuǎn)置是不起作用的,舉例:
x=linspace(0,4,5) #array([0.,1.,2.,3.,4.]) y=transpose(x) # 會轉(zhuǎn)置失敗。
如果想正確使用的話:
x.shape=(5,1) y=transpose(x) #就可以了
以上這篇對python 矩陣轉(zhuǎn)置transpose的實例講解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python如何將list中的string轉(zhuǎn)換為int
這篇文章主要介紹了Python如何將list中的string轉(zhuǎn)換為int,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07Python調(diào)用Prometheus監(jiān)控數(shù)據(jù)并計算
Prometheus是一套開源監(jiān)控系統(tǒng)和告警為一體,由go語言(golang)開發(fā),是監(jiān)控+報警+時間序列數(shù)據(jù)庫的組合。本文將介紹Python如何調(diào)用Prometheus實現(xiàn)數(shù)據(jù)的監(jiān)控與計算,需要的可以參考一下2021-12-12關(guān)于DataFrame中某列值的替換map(dict)
這篇文章主要介紹了關(guān)于DataFrame中某列值的替換map(dict),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-02-02PyCharm vs VSCode,作為python開發(fā)者,你更傾向哪種IDE呢?
這篇文章主要介紹了PyCharm和vscode作為python ide的優(yōu)劣,幫助你選擇適合自己的ide,感興趣的朋友可以了解下2020-08-08