Flatten這個函數再Mathematica中算式常用的函數,它的功能是將一個List中各項元素合併。
假設u = {{a, b}, {c, d}}; mat = {{u, 0 u}, {0 u, u}};
檢查mat的維度
Dimensions@mat
去除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合併為第二層。
讀者回應 ( 0 意見 )
訂閱發佈留言 (Atom)
發佈留言
Please leave your name and tell me what you thought about this site. Comments, suggestions and views are welcomed.
如果這篇文章對你有幫助,那請留個訊息給我~