授業内容
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月の売上個数のテーブルが以下のように与えられている。
価格テーブル(単位:円)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10月の売上個数テーブル(単位:個)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11月の売上個数テーブル(単位:個)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
各商品の2ヶ月間の売上個数を求め、続いて、各店舗の2ヶ月間の売上を求めるプログラムを書く。
さらに、この企業の2ヶ月間の売上全体を求めるプログラムを書いて提出。