You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

R语言矩阵运算:基于两个矩阵生成新矩阵的方法求助

解决矩阵交叉乘积求和的高效方案(R + Excel)

我来帮你搞定这个问题!你要做的本质就是矩阵乘法——刚好你的两个矩阵维度调整后就能直接相乘,不管用R还是Excel都能一键完成,完全不用手动处理几百条数据,比你现在的操作高效太多。

R语言方案(自动处理行列,无需手动指定)

你之前觉得R需要手动指定矩阵值和行列信息是误解啦,CSV读进来的表格可以直接转成带行列名的矩阵,关键是对齐维度:

  • 你的Matrix1是「元素(行)×站点(列)」,Matrix2是「费用(行)×元素(列)」,那Matrix3 = Matrix2 × Matrix1,结果正好是「费用(行)×站点(列)」,完全符合你的需求。

具体步骤:

  1. 读入CSV文件(假设你的CSV第一列是行名,比如Matrix1第一列是元素名,Matrix2第一列是费用名):
    # 读入数据,指定第一列为行名
    matrix1_df <- read.csv("matrix1.csv", row.names = 1)
    matrix2_df <- read.csv("matrix2.csv", row.names = 1)
    
  2. 转成矩阵:
    matrix1 <- as.matrix(matrix1_df)
    matrix2 <- as.matrix(matrix2_df)
    
  3. 执行矩阵乘法,直接得到Matrix3:
    matrix3 <- matrix2 %*% matrix1
    
  4. 导出结果到CSV(可选):
    write.csv(matrix3, "matrix3.csv")
    

这个过程完全自动保留行列名,几百条数据几秒就能跑完,根本不用手动设置任何值。

Excel方案(学习曲线平缓,用MMULT函数)

Excel里用MMULT函数就能实现同样的矩阵乘法,不用逐行拉公式:

  1. 先确认数据区域:Matrix1的数值区域(不含元素名列)的行数 = Matrix2的数值区域(不含费用名列)的列数(也就是元素的数量),这是矩阵相乘的前提。
  2. 选中要存放Matrix3的空白区域:行数等于Matrix2的费用数,列数等于Matrix1的站点数。
  3. 在编辑栏输入数组公式:
    比如Matrix2的数值区域是B1:C10(B、C列是对应元素的费用),Matrix1的数值区域是F1:H20(F、G、H列是对应站点的元素值),那公式就是:
    =MMULT(B1:C10, F1:H20)
    
  4. 输入完成后,按Ctrl+Shift+Enter(Excel 365及以后版本直接按Enter即可),整个区域会自动填充所有计算结果。

注意:如果你的表格带表头/行名,选区域的时候要避开这些文本,只选数值部分。

不管用哪种方法,核心都是利用矩阵乘法的特性自动完成所有元素的乘积求和,比手动操作效率提升N倍,数据量越大越明显。

内容的提问来源于stack exchange,提问作者communityecologist

火山引擎 最新活动