python matlab高維陣列轉置

2021-09-03 07:39:15 字數 3092 閱讀 3306

原文:

轉置可以對陣列進行重置,返回的是源資料的檢視(不會進行任何複製操作)。

轉置有三種方式,transpose方法、t屬性以及swapaxes方法。in [

1]:

import numpy

as np

in [2]: arr = np.arange(20).reshape(4,5)#生成乙個4行5列的陣列

in [3]: arr

out[3]:

array([[ 0, 1, 2, 3, 4],

[ 5, 6, 7, 8, 9],

[10, 11, 12, 13, 14],

[15, 16, 17, 18, 19]])

in [4]: arr.t #求轉置

out[4]:

array([[ 0, 5, 10, 15],

[ 1, 6, 11, 16],

[ 2, 7, 12, 17],

[ 3, 8, 13, 18],

[ 4, 9, 14, 19]])

對於高維陣列,transpose需要用到乙個由軸編號組成的元組,才能進行轉置。

這裡,著實好好理解了一下。開始的時候怎麼都想不明白。因為他跟矩陣轉置理解起來不太一樣。

主要參考:

abstractsky的部落格

albert chen

經管之家

對多維陣列來說,確定最底層的乙個基本元素位置需要用到的索引個數即是維度。這句話的理解可以結合我索引和切片的那篇文章理解。

我是這樣的理解的,比如說三維的陣列,那就對維度進行編號,也就是0,1,2。這樣說可能比較抽象。這裡的0,1,2可以理解為對shape返回元組的索引。

比如: in [

59]: arr1 = np.arange(

12).reshape(

2,2,

3) in [60]: arr1

out[60]:

array([[[ 0, 1, 2],

[ 3, 4, 5]],

[[ 6, 7, 8],

[ 9, 10, 11]]])

in [61]: arr1.shape #看形狀

out[61]: (2, 2, 3) #說明這是乙個223的陣列(矩陣),返回的是乙個元組,可以對元組進行索引,也就是0,1,2 形狀

索引202

132

所以說,transpose引數的真正意義在於這個shape元組的索引。

那麼它的轉置就應該是

in [62]: arr1.transpose((1,0,2))

out[62]:

array([[[ 0, 1, 2],

[ 6, 7, 8]],

[[ 3, 4, 5],

[ 9, 10, 11]]])

比如,數值6開始的索引是[1,0,0],變換後變成了[0,1,0]

這也說明了,transpose依賴於shape

但是,對於為什麼轉置最後乙個索引是不動的,頗為不解。陣列或者說矩陣的這塊有點太抽象了。雖然我線代成績不錯,但是這玩意不太一樣啊。

雖然還有點不解的地方,但是,理解了上方那部分之後,swapaxes方法也就很好理解了。它接受一對軸編號。進行軸對換。其實也就是shape引數。

in [

67]: arr2 = np.arange(

16).reshape(

2,2,

4)in [

68]: arr2 out[

68]: array([[[

0, 1,

2, 3], [

4, 5,

6, 7]], [[

8, 9,

10,

11], [

12,

13,

14,

15]]]) in [

69]: arr2.shape out[

69]: (

2, 2,

4) in [

70]: arr2.swapaxes(

1,2) out[

70]: array([[[

0, 4], [

1, 5], [

2, 6], [

3, 7]], [[

8, 12], [

9, 13], [

10,

14], [

11,

15]]]) in [

4]: arr2.swapaxes(

1,0)

#轉置,對比transpose(1,0,2) out[

4]: array([[[

0, 1,

2, 3], [

8, 9,

10,

11]], [[

4, 5,

6, 7], [

12,

13,

14,

15]]])

高維陣列的轉置使用permute函式

具體呼叫語法

b = permute(a,order)

按照向量order指定的順序重排a的各維。b中元素和a中元素完全相同。但由於經過重新排列,在a、b訪問同乙個元素使用的下標就不一樣了。order中的元素必須各不相同。

例子:

a=rand(4,5,6);

size(a)

ans =

4 5 6

b = permute(a,[2 1 3]);

size(b)

ans =

5 4 6

原來a是4x5x6的矩陣

按照順序[2 1 3]轉置之後,原來的第一,第二維順序改變

b的大小是5x4x6

高數 高數B模擬試卷

高數b 模擬試卷 一 選擇題 滿分20分 本大題共有5個小題,每小題4分,在每小題給出的四個選型中,只有一項符合題目要求,把所選項前的字母填在題目後的括號內.1.設 f x x0 sintdt 則f f 2 a.1b.1c.cos1d.1 cos1.2.limx 0x2sin1x sinx a.1b...

數數(高維DP)

fadbec 很善於數數,如他會數將 a 個紅球,b 個黃球,c 個藍球,d 個綠球排成 列,任意相鄰不同 的數 現在 r 君不知道 fadbec 數的對不對,想讓你也算 算。由於數字 較 所以請輸出除以 109 7 的餘數。四個正整數 a,b,c,d。輸出包含 個整數,表 答案。1 1 1 2 對...

高維字首和

給定 num 個三元組 x,y,z 每次詢問滿足 x leq qx y leq qy z leq qz 的三元組個數。x,y,z leq n n leq 10 q num leq 10 6 容易想到維護 pre x,y,z 表示 x leq x y leq y z leq z 的三元組個數 思路1利...