Re: [問題] mathematica的排序與篩選
看板Mathematica作者chungyuandye (養花種魚數月亮賞星星)時間13年前 (2011/12/14 13:40)推噓2(2推 0噓 0→)留言2則, 1人參與討論串2/2 (看更多)
※ 引述《harry901 (forcing to A cup)》之銘言:
: 問題:mathematica有篩選與排序的語法嗎?
: 假設 我有一串列資料ANS[m,n] m列 n行 每一列的行表示不同屬性
: 現在我需要比較這些屬性依序篩選 然後排列大小 我們假設
: 人 國 英 數
: ANS[5,4] = [王小明 99 60 31]
: [李大同 75 51 66]
: [陳小偉 71 20 43]
: [高小茜 81 80 79]
: [馬英文 78 56 26]
: 若我要篩選出所有數學大於30分且國文60以上的同學,mathematica有辦法直接篩選嗎?
: 查了資料似乎沒有篩選的語法...我只能先令一個FinalANS存放篩選結果
: 步驟一,先計算出FinalANS的長度
: templength=0;
: For[i=1,i=Length[ANS],i++,
: If[ANS[[i,2]]>60&&ANS[[i,4]]>30,templength++,{}]
: ]
: 上面可以將templength計算出FinalANS所需的長度
: 步驟二,將篩選後結果放入FinalANS中,如
: FinalANS=Array[fnlans,{templength,4}];
: tempwrite=0;
: For[i=1,i=Length[ANS],i++,
: If[ANS[[i,2]]>60&&ANS[[i,4]]>30,tempwrite++;
: FinalANS[[i]]=ANS[[tempwrite]],{}]
: ]
: 這樣就可以完成篩選的答案(步驟一二應該可以合併在同一個loop裡面,一時想不出)
: 不過 像這樣的例子
: mathematica沒辦法直接用簡單的過濾方式求得嗎?
: 最後是排序FinalANS 若我要依照英文成績由高排至低
: 那麼 我又得寫類似上面的迴圈一個一個去判斷...可以用Sort等等方式慢慢擠出來
: 試問 mathematica有相關排序的語法嗎?
data = {{"王小明", 99, 60, 31},
{"李大同", 75, 51, 66}, {"陳小偉", 71, 20, 43},
{"高小茜", 81, 80, 79}, {"馬英文", 78, 56, 26}};
mydata=Select[data, #[[4]] >= 30 && #[[2]] >= 60 &]
要排序的話,可以使用 ?Sort 或是 ?SortBy 了解更多的設定
按總分
SortBy[mydata,Total]
按姓名
SortBy[mydata,First]
按國文
SortBy[mydata,#[[2]]&]
按英文
SoryBy[mydata,#[[3]]&]
Select, Cases這些都是可以作為篩選的函數,不過Pattern Matching也是ok
data /. {a_, b_, c_, d_} :> {a, b, c, d} /; b >= 60 && d >= 30
找出1,2,.....,100任意三個數加總等於100的所有組合
AbsoluteTiming@ReplaceList[Range[100],
{___,a_,___,b_,___,c_,___}:>{a,b,c}/;a+b+c==50]
AbsoluteTiming@Select[Subsets[Range[100],{3}],Total@#==50&]
--
養花種魚數月亮賞星星
http://chungyuandye.twbbs.org
※ 編輯: chungyuandye 來自: 218.173.131.148 (12/14 13:53)
推
12/14 13:55, , 1F
12/14 13:55, 1F
推
12/14 13:59, , 2F
12/14 13:59, 2F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
Mathematica 近期熱門文章
PTT數位生活區 即時熱門文章