【发布时间】:2018-09-29 13:24:20
【问题描述】:
我想写一个函数,它将矩阵的列和行作为参数,并给出一个矩阵作为输出。
例如,一个函数将 m 的行 i 通过 k 矩阵 A 和列 k 的 j 由 n 矩阵 B,并返回一个矩阵 M 与元素m_i,j 等于min(A[i,] * B[,j])(逐元素乘法):
有什么简单的方法可以避免使用循环吗?是否存在矩阵的 sapply 等效项?
> matrix_A
[,1] [,2] [,3] [,4] [,5]
[1,] 1 2 3 4 5
[2,] 2 3 4 5 6
[3,] 3 4 5 6 7
[4,] 0 1 2 3 4
[5,] 5 6 7 8 9
> matrix_B
[,1] [,2] [,3] [,4] [,5]
[1,] 7 6 5 4 3
[2,] 6 5 4 3 2
[3,] 1 2 3 4 5
[4,] 8 7 6 5 4
[5,] 9 8 7 6 5
>
> output_matrix <- matrix(, nrow=nrow(matrix_A), ncol=ncol(matrix_B))
> for (row_i in 1:nrow(matrix_A)) {
+ for (col_j in 1:ncol(matrix_B)) {
+ output_matrix[row_i, col_j] <- min(matrix_A[row_i,]*matrix_B[,col_j])
+ }
+ }
> output_matrix
[,1] [,2] [,3] [,4] [,5]
[1,] 3 6 5 4 3
[2,] 4 8 10 8 6
[3,] 5 10 15 12 8
[4,] 0 0 0 0 0
[5,] 7 14 21 18 12
>
【问题讨论】:
-
我会使用 Rcpp 来避免不必要的复制。
标签: r matrix vectorization