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

标签 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)
}

最佳答案

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

## 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

但这仍然不是最佳选择......

关于r - 如何快速执行类似乘法的矩阵运算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48653971/

相关文章:

algorithm - 通过翻转单元格将二进制矩阵转换为零矩阵的贪心算法

c# - 矩阵重载运算符 c#

读取带有单引号和双引号的字符串

r - 增加 ggplot2 中的绘图大小(宽度)

c++ - 旋转NxN矩阵计数器(逆时针90度

c - 矩阵 vector 相乘时出错 - 二进制 * 的操作数无效(有 'double *' 和 'double *' )

arrays - 计算离散卷积的 "product"的有效方法

algorithm - 分而治之矩阵乘法

r - 为什么在这种情况下 r 没有修改到位?

r - "Result must have length..."错误 'complete.cases'