如何快速执行类似于乘法的矩阵运算?

时间:2018-02-07 00:09:11

标签: r matrix multiplication operation

我有两个矩阵。

A<-matrix(c(1,0,2,3),2,2)
B<-matrix(c(0,1,4,2),2,2)

取代乘法(A%*%B)并得到如下结果:

C[1,1]<-A[1,1]*B[1,1]+ A[1,2]*B[2,1]
C[1,2]<-A[1,1]*B[1,2]+ A[1,2]*B[2,2]
C[2,1]<-A[2,1]*B[1,1]+ A[2,2]*B[2,1]
C[2,2]<-A[2,1]*B[1,2]+ A[2,2]*B[2,2]

如何修改乘法版本并得到如下结果:

C[1,1]<-min(A[1,1],B[1,1])+ min(A[1,2],B[2,1])
C[1,2]<-min(A[1,1],B[1,2])+ min(A[1,2],B[2,2])
C[2,1]<-min(A[2,1],B[1,1])+ min(A[2,2],B[2,1])
C[2,2]<-min(A[2,1],B[1,2])+ min(A[2,2],B[2,2])

我知道我可以通过轮换来实现,但我正在寻找更快的解决方案。

result <- matrix(nrow= 2, ncol= 2)
for(i in 1:2){
  minMat <-t(apply(B,2,function(x) pmin(x, A[i,])))
  result[i,]<-rowSums(minMat)
}

1 个答案:

答案 0 :(得分:4)

解决方案的一部分可能是使用如下函数(来自上述评论之一):

## Defining the function
sum.min.row <- function(i, A, B) {
    minMat <-t(apply(B,2,function(x) pmin(x, A[i,])))
    rowSums(minMat)
}

## Applying it to the whole matrix
t(sapply(1:nrow(A), sum.min.row, A, B))
#      [,1] [,2]
# [1,]    1    3
# [2,]    1    2

虽然这仍然不是最佳的......