行列計算でデータベースを処理する 山中和義 2006/12/09 21:44:06 └まとめてみました。 山中和義 2006/12/12 09:41:53 └ソース公開アドレスを変更しました。 山中和義 2006/12/19 15:19:37
行列計算でデータベースを処理する 山中和義 2006/12/09 21:44:06 ツリーへ
行列計算でデータベースを処理する |
返事を書く |
山中和義 2006/12/09 21:44:06 | |
!成績表 DATA 39,58,86 !Aくん 国語,数学,英語の点数 DATA 88,98,75 !Bさん DATA 65,33,67 !Cくん DATA 70,75,65 !Dくん DATA 92,85,90 !Eさん !******** !* 作成 * !******** !SQL> CREATE TABLE 成績表 LET MaxRow=5 !行数 LET MaxColumn=3 !桁数 DIM DB(MaxRow,MaxColumn) MAT READ DB !データをつくる DIM Table(MaxRow,MaxColumn) !作業用 !******** !* 一覧 * !******** !SQL> SELECT * FROM 成績表 DIM Mar(MaxRow,MaxRow),Mac(MaxColumn,MaxColumn) MAT Mar=IDN MAT Mac=IDN MAT Table=Mar*DB MAT Table=Table*Mac MAT PRINT Table !全データの表示 !!!MAT PRINT DB LET NumOfRow=2 !選択された行数 LET NumOfColumn=2 !選択された桁数 DIM Row(NumOfRow,MaxColumn),Column(MaxRow,NumOfColumn),Cell(NumOfRow,NumOfColumn) !作業用 !******** !* 抽出 * !******** !SQL> SELECT 数学,英語 FROM 成績表 DIM Mcolumn(NumOfColumn,MaxColumn) DATA 0,1,0 !※1:選択箇所で、行方向(横)に1箇所のみ。 DATA 0,0,1 MAT READ Mcolumn DIM Mc(MaxColumn,NumOfColumn) !転置 MAT Mc=TRN(Mcolumn) MAT Column=DB*Mc !射影 MAT PRINT Column !SQL> SELECT * FROM 成績表 WHERE なまえ="E" OR なまえ="B" DIM Mrow(MaxRow,NumOfRow) DATA 0,0 !※1:選択箇所で、列方向(縦)に1箇所のみ。 DATA 0,1 DATA 0,0 DATA 0,0 DATA 1,0 MAT READ Mrow DIM Mr(NumOfRow,MaxRow) !転置 MAT Mr=TRN(Mrow) MAT Row=Mr*DB !選択 MAT PRINT Row !SQL> SELECT 数学,英語 FROM 成績表 WHERE なまえ="E" OR なまえ="B" MAT Row=Mr*DB !Eさん、Bさんの MAT Cell=Row*Mc !数学、英語の点 MAT PRINT Cell !******** !* 合計 * !******** !SQL> SELECT 国語+数学+英語 FROM 成績表 DIM Msum(1,MaxColumn) !3科目の合計 MAT Msum=CON DIM Ms(MaxColumn,1) !転置 MAT Ms=TRN(Msum) MAT Column=DB*Ms !sum MAT PRINT Column !SQL> SELECT 国語+数学+英語 FROM 成績表 WHERE なまえ="E" OR なまえ="B" MAT Row=Mr*DB MAT Cell=Row*Ms MAT PRINT Cell !************ !* 並べ替え * !************ !SQL> SELECT * FROM 成績表 ORDER BY 数学 DESC DIM Msort(MaxRow,MaxRow) !数学の点の高い順 DATA 0,1,0,0,0 DATA 0,0,0,0,1 DATA 0,0,0,1,0 DATA 1,0,0,0,0 DATA 0,0,1,0,0 MAT READ Msort MAT Table=Msort*DB !並べ替え MAT PRINT Table END |
└まとめてみました。 山中和義 2006/12/12 09:41:53 ツリーへ
Re: 行列計算でデータベースを処理する |
返事を書く |
山中和義 2006/12/12 09:41:53 | |
まとめてみました。
MAT文は数値計算しかしませんが、文字列たとえば、「なまえ」の項目で "A"*1は"A"、"A"*0はNULLというような計算ができれば 行列の計算で一括処理ができそうです。 http://www.urban.ne.jp/home/kz4ymnk/seminar/basic/mtxdb.txt |
└ソース公開アドレスを変更しました。 山中和義 2006/12/19 15:19:37 ツリーへ
Re: まとめてみました。 |
返事を書く |
山中和義 2006/12/19 15:19:37 | |