【numpy筆記_7】array對(duì)象的轉(zhuǎn)置

講完了數(shù)組對(duì)象的基本知識(shí),我們今天看看如何變化一個(gè)數(shù)組的結(jié)構(gòu)撵孤,也就是轉(zhuǎn)置操作迈着。

轉(zhuǎn)置,就是在數(shù)組維度不變的情況下邪码,使數(shù)組結(jié)構(gòu)發(fā)生變化的過程裕菠。

轉(zhuǎn)置可能是體、行闭专、列的數(shù)目發(fā)生變化奴潘,也可能是元素的排列順序發(fā)生變化。但一個(gè)數(shù)組的轉(zhuǎn)置影钉,其維度永遠(yuǎn)不變画髓。

轉(zhuǎn)置有點(diǎn)類似玩魔方。設(shè)想一下你也可以將魔方各種顛倒平委、行變列奈虾、列變行,也可以扭轉(zhuǎn)魔方把小塊打散廉赔。但魔方永遠(yuǎn)是一個(gè)立方體(用錘子不算)肉微。

轉(zhuǎn)置包括以下操作方法:

  • np.transpose()方法:將數(shù)組的shape進(jìn)行對(duì)調(diào),有參數(shù)蜡塌。
  • object.T方法(沒有括號(hào)):將行列對(duì)調(diào)浪册。
  • np.swapaxes()方法:調(diào)換shape的任意兩個(gè)值,有參數(shù)岗照。
  • np.rollaxis()方法:將指定的shape值滾到指定的位置村象,有參數(shù)。

np.transpose()方法:

將一個(gè)數(shù)組的維度攒至,按指定要求對(duì)調(diào)厚者。共有兩個(gè)參數(shù):

  • a:指定的數(shù)組;
  • axes:指定的維度順序迫吐,接收一個(gè)元組库菲,該元組像索引一樣,對(duì)應(yīng)著數(shù)組shape(c,b,a)的參數(shù)志膀。

像這樣:


transpose()參數(shù).png
import numpy as np
arr = np.arange(24).reshape((2,3,4))   # 2塊 3行 4列
print('原arr數(shù)組:\n',arr)
arr1 = np.transpose(arr, axes=(1,2,0))   # 3塊 4行 2列
print('轉(zhuǎn)置后的arr1數(shù)組:\n',arr1)
# 運(yùn)行結(jié)果:
原arr數(shù)組:
 [[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
轉(zhuǎn)置后的arr1數(shù)組:
 [[[ 0 12]
  [ 1 13]
  [ 2 14]
  [ 3 15]]

 [[ 4 16]
  [ 5 17]
  [ 6 18]
  [ 7 19]]

 [[ 8 20]
  [ 9 21]
  [10 22]
  [11 23]]]
發(fā)現(xiàn)了嗎熙宇?

既然理解了axes=(0,1,2)和shape參數(shù)(叫“軸”)呈索引對(duì)應(yīng)關(guān)系,也就懂了元素是如何被調(diào)換的溉浙。是的烫止,每個(gè)元素都有一個(gè)index坐標(biāo)系(如上例中的元素“0”是[0, 0, 0],元素“14”是[1, 0, 2])戳稽,逐一對(duì)每個(gè)元素坐標(biāo)執(zhí)行axes的調(diào)換規(guī)則就是了馆蠕。
最后說一句,transpose()方法不寫axes參數(shù),代表直接行列對(duì)倒(“軸”對(duì)倒)互躬,如(2,4)到(4,2)播赁,(2,5,3)到(3,5,2)等等。

object.T方法(沒有括號(hào)):

這個(gè)操作和transpose()方法不帶參時(shí)別無二致吼渡,不多講了容为。

swapaxes()方法:

該方法用于交換數(shù)組的任意兩個(gè)軸。共有三個(gè)參數(shù):

  • a:指定的數(shù)組寺酪;
  • axis1:要對(duì)調(diào)的一個(gè)軸坎背;
  • axis2:要對(duì)調(diào)的另一個(gè)軸。
import numpy as np
arr = np.arange(24).reshape((2,3,4))   # 2塊 3行 4列
print('原arr數(shù)組:\n',arr)
print('原arr數(shù)組的shape:',arr.shape)
arr1 = np.swapaxes(arr, axis1=1, axis2=2)  # arr的1軸(行)和2軸(列)對(duì)調(diào)房维。也可寫成(arr,2,1)是一個(gè)意思

print('對(duì)調(diào)任意兩個(gè)軸后的arr1數(shù)組:\n',arr1)
print('arr1的shape:',arr1.shape)
# 運(yùn)行結(jié)果:
原arr數(shù)組:
 [[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
原arr數(shù)組的shape: (2, 3, 4)
對(duì)調(diào)任意兩個(gè)軸后的arr1數(shù)組:
 [[[ 0  4  8]
  [ 1  5  9]
  [ 2  6 10]
  [ 3  7 11]]

 [[12 16 20]
  [13 17 21]
  [14 18 22]
  [15 19 23]]]
arr1的shape: (2, 4, 3)

rollaxis()方法:

將指定的shape值滾到指定的位置。注意rolaxis是滾抬纸,不是調(diào)咙俩。


rollaxis向后滾動(dòng).png

參數(shù)也有三個(gè):

  • a:指定的數(shù)組;
  • axis:指定要滾動(dòng)的軸湿故;
  • start:滾到第幾位阿趁。不寫默認(rèn)start=0,即讓軸移動(dòng)到第一位坛猪。
import numpy as np
arr = np.arange(120).reshape((3,5,2,4))   # 2塊 3行 4列
arr1 = np.rollaxis(arr, axis=0, start=4)  # shape()的0軸滾到第4個(gè)
arr2 = np.rollaxis(arr, axis=2, start=1)  # shape()的2軸滾到第2個(gè)
arr3 = np.rollaxis(arr, axis=3, start=4)  # shape()的3軸滾到第4個(gè)
arr4 = np.rollaxis(arr, axis=3, start=2)  # shape()的3軸滾到第3個(gè)
arr5 = np.rollaxis(arr, axis=0, start=0)  # shape()的0軸滾到第1個(gè)

print('原arr數(shù)組的shape:',arr.shape)
print('arr1的shape:',arr1.shape)
print('arr2的shape:',arr2.shape)
print('arr3的shape:',arr3.shape)
print('arr4的shape:',arr4.shape)
print('arr5的shape:',arr5.shape)
# 運(yùn)行結(jié)果:
原arr數(shù)組的shape: (3, 5, 2, 4)
arr1的shape: (5, 2, 4, 3)
arr2的shape: (3, 2, 5, 4)
arr3的shape: (3, 5, 2, 4)
arr4的shape: (3, 5, 4, 2)
arr5的shape: (3, 5, 2, 4)

以上是數(shù)組轉(zhuǎn)置的所有內(nèi)容脖阵。其實(shí)四個(gè)方法有很多共通之處,底層都是調(diào)動(dòng)軸索引到指定位置墅茉。

我們拿一個(gè)小案例命黔,用四種方法實(shí)現(xiàn)對(duì)一個(gè)二維數(shù)組的T轉(zhuǎn)置(行列互倒)。
import numpy as np
arr = np.arange(12).reshape(3, 4)
arr1 = np.transpose(a=arr, axes=(1,0))   # 將0軸和1軸重新排序
arr2 = np.swapaxes(a=arr, axis1=0, axis2=1)   # 將0軸和一軸對(duì)調(diào)
arr3 = arr.T   # T轉(zhuǎn)置
arr4 = np.rollaxis(a=arr, axis=1, start=0)  # 將1軸提到最前面
print('arr數(shù)組的shape:', arr.shape)
print('arr1數(shù)組的shape:', arr1.shape)
print('arr2數(shù)組的shape:', arr2.shape)
print('arr3數(shù)組的shape:', arr3.shape)
print('arr4數(shù)組的shape:', arr4.shape)
# 運(yùn)行結(jié)果:
arr數(shù)組的shape: (3, 4)
arr1數(shù)組的shape: (4, 3)
arr2數(shù)組的shape: (4, 3)
arr3數(shù)組的shape: (4, 3)
arr4數(shù)組的shape: (4, 3)

“軸”就斤,是操作array對(duì)象非常重要的概念悍募。讓我們?cè)倏偨Y(jié)下何為“軸”:

軸,基于數(shù)組的shape而存在洋机。

  • 當(dāng)shape有1個(gè)坠宴,即(a,)
    此時(shí)a是0軸;代表array對(duì)象的最小元素 --- 列绷旗。

  • 當(dāng)shape為2個(gè)喜鼓,即(b,a)
    此時(shí)b是0軸,代表array對(duì)象的 --- 行衔肢;
    此時(shí)a是1軸庄岖,代表array對(duì)象的最小元素 --- 列。

  • 當(dāng)shape為3個(gè)角骤,即(c,b,a)
    此時(shí)c是0軸顿锰,代表array對(duì)象的 --- 塊;
    此時(shí)b是1軸,代表array對(duì)象的 --- 行硼控;
    此時(shí)a是2軸刘陶,代表array對(duì)象的最小元素 --- 列。

  • 當(dāng)shape為4個(gè)牢撼,即(d,c,b,a)
    此時(shí)d是0軸匙隔,代表array對(duì)象的 --- 大塊(土話別介意 =。=)熏版;
    此時(shí)c是1軸纷责,代表array對(duì)象的 --- 小塊;
    此時(shí)b是2軸撼短,代表array對(duì)象的 --- 行再膳;
    此時(shí)a是3軸,代表array對(duì)象的最小元素 --- 列曲横。

有邏輯的地方在于喂柒,在shape(2,3,4)中,你可以把軸理解為shape元素的索引禾嫉,通過索引定位到shape元素灾杰,并實(shí)現(xiàn)元素間的各種對(duì)倒和互換;
而在一個(gè)可視化的數(shù)組中熙参,比如print(array)時(shí)艳吠,可以把軸理解為數(shù)組的顆粒度遞增,就像上面的shape(d,c,b,a)孽椰,0軸代表大塊昭娩,1軸代表小塊,2軸代表行黍匾,3軸代表列题禀。而shape(a,),0軸代表列膀捷,因?yàn)榱幸呀?jīng)是最小的分割單位了迈嘹。


更新一下numpy系列的學(xué)習(xí)進(jìn)度:

后面會(huì)再講一下numpy的數(shù)組拼接和分割,希望用一篇搞定全庸。而后有關(guān)數(shù)組的常規(guī)操作就講完了秀仲,到此你也對(duì)numpy的玩法有了相當(dāng)全面的掌握。再往后就是各種數(shù)學(xué)函數(shù)的調(diào)用壶笼,用來實(shí)現(xiàn)特定的計(jì)算神僵。沒有太多燒腦的部分,甚至需要時(shí)再百度也來得及覆劈。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末保礼,一起剝皮案震驚了整個(gè)濱河市沛励,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌炮障,老刑警劉巖目派,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異胁赢,居然都是意外死亡企蹭,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門智末,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谅摄,“玉大人,你說我怎么就攤上這事系馆∷湍” “怎么了?”我有些...
    開封第一講書人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵由蘑,是天一觀的道長(zhǎng)闽寡。 經(jīng)常有香客問我,道長(zhǎng)纵穿,這世上最難降的妖魔是什么下隧? 我笑而不...
    開封第一講書人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任奢人,我火速辦了婚禮谓媒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘何乎。我一直安慰自己句惯,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開白布支救。 她就那樣靜靜地躺著抢野,像睡著了一般。 火紅的嫁衣襯著肌膚如雪各墨。 梳的紋絲不亂的頭發(fā)上指孤,一...
    開封第一講書人閱讀 49,821評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音贬堵,去河邊找鬼恃轩。 笑死,一個(gè)胖子當(dāng)著我的面吹牛黎做,可吹牛的內(nèi)容都是我干的叉跛。 我是一名探鬼主播,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼蒸殿,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼筷厘!你這毒婦竟也來了鸣峭?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤酥艳,失蹤者是張志新(化名)和其女友劉穎摊溶,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體玖雁,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡更扁,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了赫冬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片浓镜。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖劲厌,靈堂內(nèi)的尸體忽然破棺而出膛薛,到底是詐尸還是另有隱情,我是刑警寧澤补鼻,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布哄啄,位于F島的核電站,受9級(jí)特大地震影響风范,放射性物質(zhì)發(fā)生泄漏咨跌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一硼婿、第九天 我趴在偏房一處隱蔽的房頂上張望锌半。 院中可真熱鬧,春花似錦寇漫、人聲如沸刊殉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)记焊。三九已至,卻和暖如春栓撞,著一層夾襖步出監(jiān)牢的瞬間遍膜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工瓤湘, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瓢颅,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓岭粤,卻偏偏與公主長(zhǎng)得像惜索,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子剃浇,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容