1. ホーム
  2. r

行列の行とベクトルを掛け合わせる?

2023-09-15 19:38:53

質問

私は、数値 matrix があり、25列、23行のベクトルがあります。行列の各行とベクトルを掛け合わせるのに for ループを使わずに行列の各行にベクトルを掛けるにはどうしたらよいでしょうか?

結果は 25x23 の行列(入力と同じサイズ)であるべきですが、各行がベクトルによって乗算されています。

Hatmatrix の回答から再現可能な例を追加しました。

matrix <- matrix(rep(1:3,each=5),nrow=3,ncol=5,byrow=TRUE)

     [,1] [,2] [,3] [,4] [,5]
[1,]    1    1    1    1    1
[2,]    2    2    2    2    2
[3,]    3    3    3    3    3

vector <- 1:5

希望する出力。

     [,1] [,2] [,3] [,4] [,5]
[1,]    1    2    3    4    5
[2,]    2    4    6    8   10
[3,]    3    6    9   12   15

どのように解決するのですか?

あなたが探しているのは sweep() .

# Create example data and vector
mat <- matrix(rep(1:3,each=5),nrow=3,ncol=5,byrow=TRUE)
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    1    1    1    1
[2,]    2    2    2    2    2
[3,]    3    3    3    3    3

vec <- 1:5

# Use sweep to apply the vector with the multiply (`*`) function
#  across columns (See ?apply for an explanation of MARGIN) 
sweep(mat, MARGIN=2, vec, `*`)
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    2    3    4    5
[2,]    2    4    6    8   10
[3,]    3    6    9   12   15

長年にわたって改良が加えられてきましたが、Rのコア機能の1つです。