新しく発言する EXIT インデックスへ
行列計算でデータベースを処理する

  行列計算でデータベースを処理する 山中和義 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
ソース公開アドレスを変更しました。

http://www.urban.ne.jp/home/kz4ymnk/seminar/basic/mtxdb.html


インデックスへ EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。