行列要素に対する演算     Last modified: Jun 28, 2004

以下では要素に対する掛算の例であるが,足し算,引き算,わり算,べき乗など何でも同じである。

具体例:
	行列 x <- matrix(1:12, byrow=TRUE, nc=3)
	> x
	     [,1] [,2] [,3]
	[1,]    1    2    3
	[2,]    4    5    6
	[3,]    7    8    9
	[4,]   10   11   12
	の各列をそれぞれ,2, 5, 10 倍したい

プログラム例 1:
	> x <- matrix(1:12, byrow=TRUE, nc=3)
	> f <- c(2, 5, 10)
	> for (i in 1:3) { # for 文を使うのは R らしくない
	+ 	x[,i] <- x[,i]*f[i]
	+ }
	> x
	     [,1] [,2] [,3]
	[1,]    2   10   30
	[2,]    8   25   60
	[3,]   14   40   90
	[4,]   20   55  120
	
プログラム例 2:
	> x <- matrix(1:12, byrow=TRUE, nc=3)
	> f <- c(2, 5, 10)
	> ff <- matrix(f, byrow=TRUE, nrow=4, ncol=3) # x と同じ大きさの行列を作る(メモリーの無駄だと思う)
	> ff
	     [,1] [,2] [,3]
	[1,]    2    5   10
	[2,]    2    5   10
	[3,]    2    5   10
	[4,]    2    5   10
	> x <- x*ff
	> x
	     [,1] [,2] [,3]
	[1,]    2   10   30
	[2,]    8   25   60
	[3,]   14   40   90
	[4,]   20   55  120

プログラム例 3:
	> x <- matrix(1:12, byrow=TRUE, nc=3)
	> f <- c(2, 5, 10)
	> x <- t(t(x)*f) # 転置行列にすれば,倍数ベクトルはリサイクルされる。演算後に結果を転地してもとのサイズに戻す
	> x                 # R らしいかもしれない
	     [,1] [,2] [,3]
	[1,]    2   10   30
	[2,]    8   25   60
	[3,]   14   40   90
	[4,]   20   55  120

各行を定数ベクトル倍するときには転置無用

	> x <- matrix(1:12, byrow=TRUE, nc=3)
	> x*c(2, 3, 5, 8) # 各行を,2, 3, 5, 8 倍する
	     [,1] [,2] [,3]
	[1,]    2    4    6
	[2,]   12   15   18
	[3,]   35   40   45
	[4,]   80   88   96


・ 直前のページへ戻る  ・ E-mail to Shigenobu AOKI

Made with Macintosh