我有两个矩阵。
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)
}
答案 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
虽然这仍然不是最佳的......