You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用mapply对两个矩阵行执行带权重矩阵的内积计算?

解决mapply传递矩阵参数的问题

错误原因

直接将矩阵W传入mapply时,函数会自动将矩阵拆分为单个标量元素(此处为重复的1),导致每次调用inn.prod时,W变成数值1而非原矩阵,触发矩阵乘法维度不兼容的错误。用simplify2array(Q)处理后的数组同样会被mapply拆分,无法完整传递原矩阵。

正确写法

方法1:使用MoreArgs参数(推荐)

mapply的MoreArgs参数可指定需要完整传递给每个函数调用的额外参数,不会被拆分:

X = matrix(1:9,3,3)
Y = matrix(1,3,3)
W = matrix(1,3,3)

inn.prod = function(x,y,W){
  t(x) %*% W %*% y
}

# 正确调用方式
mapply(inn.prod, asplit(X, 1), asplit(Y, 1), MoreArgs = list(W = W))

执行后会返回正确的加权内积结果:36 45 54。

方法2:将W包装为单元素列表

把W放在一个单元素列表中传入,mapply会将列表中的完整矩阵传递给每个函数调用:

mapply(inn.prod, asplit(X, 1), asplit(Y, 1), list(W), SIMPLIFY = FALSE)

若需要向量形式的结果,可去掉SIMPLIFY=FALSE参数。

函数优化(可选)

原函数中手动将x、y转为矩阵的步骤可简化,利用R中向量的默认处理逻辑,直接用t(x)转置行向量即可:

inn.prod = function(x, y, W){
  t(x) %*% W %*% y
}

该写法与原函数功能完全一致,代码更简洁。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 14:32:21