Re: [問題] Do指令中產生的Table如何listplot[已解決]
看板Mathematica作者chungyuandye (養花種魚數月亮賞星星)時間13年前 (2012/01/25 21:58)推噓1(1推 0噓 0→)留言1則, 1人參與討論串2/2 (看更多)
※ 引述《prays (:)))》之銘言:
: : 這個問題好像很簡單,找了好久都找不到比較好的方法。
: : 希望有高手幫忙。
: : 我用Do指令批次產生Table
: : {{a,b},{c,d},...}
: : 然後希望用ListPlot把所有產生的Table都畫出來
: : 找不到可以直接抽出Table作圖的方法,
: : 向高手求救,感謝
: 我用了個笨方法,方法如下
: result={};
: Do[.........;
: Q=Table (*我要產生的*)
: ,{i,1,100}]
: ListPlot[Flatten[result,1]]
: 終於畫出來拉:)
Flatten這個函數再Mathematica中算是相當常用的函數,
它的功能是將一個List中各項元素合併。
假設u = {{a, b}, {c, d}}; mat = {{u, 0 u}, {0 u, u}};
檢查mat的維度
Dimensions@mat
所以可以知道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合併為第二層。
--
我打研究室走過 那獨坐電腦前的容顏如苦瓜的糾結
靈感不來 長壽的煙霧不散
研究室如小小的寂寞的城 恰如商管的電梯向晚
http://chungyuandye.twbbs.org
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.173.129.60
※ 編輯: chungyuandye 來自: 218.173.129.60 (01/25 21:58)
推
01/26 03:59, , 1F
01/26 03:59, 1F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
Mathematica 近期熱門文章
PTT數位生活區 即時熱門文章