Stats

Popular Posts

Followers

Mathematica中Flatten函數說明

戴忠淵 於 2009年10月30日星期五 下午12:39 發表

Flatten這個函數再Mathematica中算式常用的函數,它的功能是將一個List中各項元素合併。
假設u = {{a, b}, {c, d}}; mat = {{u, 0 u}, {0 u, u}};

檢查mat的維度
Dimensions@mat

{2, 2, 2, 2}

所以可以知道mat是一個2x2x2x2的矩陣
mat//matrixform







很明顯可以看出mat為4個子矩陣所組成

去除mat第一層括號
Flatten[mat, 1]

{{{a, b}, {c, d}}, {{0, 0}, {0, 0}}, {{0, 0}, {0, 0}}, {{a, b}, {c, d}}}

Flatten[mat, 1]//Dimensions
{4, 2, 2}

去除mat第一層括號後變成{4, 2, 2}的矩陣

由於mat有四層括號,所以Flatten[mat, 3]所得到的矩陣會是一個1x16的向量。

比較進階的用法是
Flatten[mat,{{s11,s12},{s21,s22}}]

意思是將mat的s11,s12層合併為第一層,s21,s22層合併為第二層

為了方便說明,先幫mat的各項元素加上足標
mat1 = MapIndexed[f, {{u, 0 u}, {0 u, u}}, {4}] //. f[x_, y_List] :> Subscript[x, Row@y]
mat1 // MatrixForm







Flatten[mat1, {{1, 3}, {2, 4}}] // Dimensions
{4,4}

所已經合併後會變成4x4的矩陣
Flatten[mat1, {{1, 3}, {2, 4}}] // MatrixForm







你會發現在每一列中,第一個足標和第三個足標都是相同的。 而在每一行中,第二個足標和第四個足標都是相同的。 因為mat的1,3層合併為第一層,剩下的2,4合併為第二層

Flatten[mat1, {{1, 4}, {2, 3}}] // MatrixForm







同樣的,上面的函數傳回的結果每一列第一個足標和第四個足標都是相同的。而在每一行中,第二個足標和第三個足標都是相同的。因為mat的1,4層合併為第一層,剩下的2,3合併為第二層。

Tags: ,

讀者回應 ( 0 意見 )

發佈留言

Please leave your name and tell me what you thought about this site. Comments, suggestions and views are welcomed.

如果這篇文章對你有幫助,那請留個訊息給我~