授業内容


第19回(第6回)  SAS/IMLでの行列演算 11/24
19 SAS/IMLでの行列演算

19.1 行列演算子

行列を計算する方法というのは、行列同士、行列と要素、要素同士の計算があります。行列同士、行列と要素に付いては以前話しているので(10/5&12)、割愛します。ここでは、要素間の計算を考えます。

行列演算子

要素間の演算

演算子

意味

加法

減法

乗法

##

べき乗

除法

<>

最大値

><

最小値

論理和(値が真なら1、偽なら0)

論理積( 〃 )

小なり( 〃 )

<=

以下( 〃 )

大なり( 〃 )

>=

以上( 〃 )

^=

等しくない( 〃 )

等しい( 〃 )

MOD(m,n)

剰余(mでnを割った余り)

SAS/IMLプログラム例

【新規プログラム】
proc iml;
reset print;
A = {1 2,3 4};
B = {5 6,7 8};
C = A + B;*これは、以前やった。;
D1 = A * B;
D2 = A # B;*D1との違いを確認;
E = A / B;*要素ごとの割り算であり、行列同士の割り算ではないことを注意;
quit;

【プログラム末尾】

 

次元縮小演算子

行列の情報をベクトルもしくはスカラに次元を縮小する。

演算子

意味

加法

乗法

<>

最大値

><

最小値

<:>

最大要素のインデックス

>:<

最小要素のインデックス

平均

##

平方和

これは次のように使います。

SAS/IMLプログラム例
【新規プログラム2】
proc iml;
reset print;
A = {1 2,3 4};
B = A[+,];*列ごと(縦方向)に合計;
C = A[,+];*行ごと(横方向)に合計;
D = A[+];*全要素について合計;
E = A[#,];*列ごとの要素の積をとる;
F = A[:,];*列ごとに平均をとる;
quit;

【プログラム末尾】

 

行列代数特有の演算

演算子

意味

行列積

**

行列べき乗積

直積(クロネッカー積)

`

転置−接尾演算子−(行列の後ろにつけることで、その行列を転置させる)
「`:バッククォート」は、「':クォート」とは異なります。誤って使った場合、回避できないエラーになる場合があるので特に注意してください。「`:バッククォート」は、「shift+@」のポジションにあります。

【新規プログラム3】
proc iml;
reset print;
A = {1 2,3 4};
B = A`;*行と列を入れ替える;
C = {5 6 7};*これは行ベクトル;
D = C`;*上の行ベクトルを列ベクトルへと変形;
quit;
【プログラム末尾】

 

行列の結合

演算子

意味

||

2行列の横接続(merge)

//

2行列の縦接続(set)

【新規プログラム4】
proc iml;
reset print;
A = {1 2,3 4};
B = {5 6,7 8};
C = A||B;*Aに右からBを接続;
D = A // B;*Aに下からBを接続;
quit;

【プログラム末尾】


その他の演算子も入れて、各人で色々試してみてください。

 

今週の課題

ある企業が3つのチェーン店を持ち、それぞれの店舗で4種類の財を販売している。その価格テーブル10月、11月の売上個数のテーブルが以下のように与えられている。

価格テーブル(単位:円)

店舗\商品

商品1

商品2

商品3

商品4

天神店

4800

1000

1480

2000

博多店

4800

1000

1380

1500

マリノアシティ

4000

1000

1200

1800

10月の売上個数テーブル(単位:個)

店舗\商品

商品1

商品2

商品3

商品4

天神店

29

3

104

13

博多店

19

1

78

64

マリノアシティ

42

2

100

15

11月の売上個数テーブル(単位:個)

店舗\商品

商品1

商品2

商品3

商品4

天神店

20

4

98

11

博多店

20

3

82

52

マリノアシティ

32

6

100

24

各商品の2ヶ月間の売上個数を求め、続いて、各店舗の2ヶ月間の売上を求めるプログラムを書く。

さらに、この企業の2ヶ月間の売上全体を求めるプログラムを書いて提出。


一つ前の週へ 先頭に戻る 一つ後の週へ


ホーム シラバス 授業計画 授業へのQ&A コンピューター初心者の皆さんへ