Rメモ(行列の乗算、行列の生成、乱数)

   2017/09/09

最近ちょっとRを使う機会が多いのでメモ的な。

・行列の乗算
「A*B」みたいに、「*」だけを使うと一般に想像する行列の乗算は行われないらしい。どうやらこれだと「要素ごと」の乗算になるんだとか。正方行列についてコードを書いていて、それを一般の行列に適用しようとしたらエラーが出て「???」となってしまった。いわゆる行列どうしの乗算は「A%*%B」のように「%*%」を演算子として使用しなければならないそうな。計算結果をちゃんと吟味してたらすぐ気づいたんでしょうか...

・行列の生成
Rで行列使うときは、僕は「ベクトル生成→行列に変換」という手順を踏んで使ってます(「R 行列」でググると大体この手順が出てくる)。そんで、そのベクトルを作るときも、成分が全部0とかでなく、[1 2 3 4 5]みたいになってるベクトルを作って行列に変換して、それから所望の成分を入れていく、って感じです。matlabだと「成分が全部0のこの大きさの行列」っていうのが一発で作れるのでちょっと煩わしい感じがしますが、慣れればまあそんなでもないです。
多分よくあるのは次みたいなの。

A=1:8 #[1 2 3 4 5 6 7 8]っていうベクトルを生成
dim(A)=c(2,4) #2行4列の行列に変換

dim(A)=c(行,列)でベクトルを行列に変換できます。
成分が全部0の行列を作りたければこんな感じ。

A=rep(0,9) #0が9個並んだベクトルを生成
dim(A)=c(3,3) #3行3列の行列に変換

rep(m,n)でmがn個並んだベクトルが作れます。これ結構便利です。

・整数乱数
乱数はrunifを使って生成できます。

A=runif(5,min=0,max=10)

とすると出力はこんな感じ

> A
[1] 3.49992183 7.39049797 5.13737796 0.06365403 2.25205088

runif(要素の個数,min=最小値,max=最大値)というふうに使います。最大値で入力した値は選択されないっぽい?(例えば今の例だと値として10は選択されないみたいな)
で、整数にしたいときは

 A=as.integer(A)

とやれば

> A
[1] 3 7 5 0 2

となります。切り捨てで整数にしてくれるようですね。
あとは切り捨てしてくれるfloorを使う手もあります。

A=runif(5,min=0,max=10) 
A=floor(A)

とか。切り上げのceilingを使うと

A=runif(5,min=0,max=10) 
A=ceiling(A)

となります。

例えば要素の値が1~500であるような10×10の整数乱数の行列が欲しければ

A=runif(10*10,min=0,max=501) 
A=as.integer(A)
dim(A)=c(10,10)

とかやればいいです。

  • このエントリーをはてなブックマークに追加
  • Pocket

コメントを残す