r - 如何将两个大矩阵乘以相应的列和行
问题描述
例如,我有两个矩阵:
> A
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
> B
[,1] [,2]
[1,] 7 10
[2,] 8 11
[3,] 9 12
我想要一个名为 C 的向量,其元素 C[i]=A[i,]*B[,i],所以结果应该是:
> C
[,1]
[1,] 76
[2,] 136
我使用了 for 循环for (i in 1:2) {C[i]=A[i,]%*%B[,i]}
。但这很慢。而且我还尝试A%*%B
在对角线上取元素,当矩阵很大时,它只会让我的电脑崩溃。你能给我一些建议吗?非常感谢!
解决方案
直接乘法(不是矩阵乘法,而是逐元素乘法)可以满足我们的需求。这得到了我们想要的乘法 - 之后我们只想取行的总和。如果我们需要结果是列矩阵,我们可以转换为矩阵。
> A <- matrix(1:6, nrow = 2)
> A
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
> B <- matrix(7:12, ncol = 2)
> B
[,1] [,2]
[1,] 7 10
[2,] 8 11
[3,] 9 12
> rowSums(A * t(B))
[1] 76 136
> as.matrix(rowSums(A * t(B)))
[,1]
[1,] 76
[2,] 136
推荐阅读
- java - 别名适用于 Quickbooks sdk 吗?
- r - 如何安装 plm 包?
- c# - 如何知道使用调试诊断工具请求调用了 OperationContract
- javascript - 如何使用谷歌一键登录提取用户的完整信息?
- angular - 如何加快 Angular 7 中初始加载的加载时间?
- python - GEKKO 中的混合整数非线性规划问题
- node.js - 该 api 正在返回匹配的日期以及与指定日期不匹配的日期
- kubernetes - 为什么 Openshift 在滚动部署之前扩展旧部署
- c++ - CTPL线程池库如何等待所有线程完成?
- flask - manage.py如何启动flask的迭代