R语言中如何计算两个矩阵的dot product(点积)
R语言计算指定矩阵点积匹配预期结果
原始数据定义
# 电影特征矩阵:5行2列,每行对应1部电影的2个维度特征 movies <- matrix(c(3,1,1,2,1,4,3,1,1,3), ncol = 2, byrow = T) # 用户特征矩阵:4行2列,每行对应1个用户的2个维度权重 users <- matrix(c(1,0,0,1,1,0,1,1), ncol = 2, byrow = T) # 预期输出矩阵:4行5列,行对应用户、列对应电影,值为二者的特征点积 expected <- matrix(c(3,1,1,3,1, 1,2,4,1,3, 3,1,1,3,1, 4,3,5,4,4), ncol = 5, byrow = T)
实现代码
R中使用%*%运算符执行标准矩阵点积运算,由于两个矩阵的行均对应样本、列均对应特征,需要将电影矩阵转置后再相乘,即可得到和预期完全一致的结果:
# 计算点积 result <- users %*% t(movies) # 校验结果一致性 all.equal(result, expected) # 运行返回 TRUE 即结果完全匹配
计算逻辑说明
- 线性代数中矩阵乘法要求左矩阵列数等于右矩阵行数,输出矩阵维度为「左矩阵行数 × 右矩阵列数」
- 此处
users维度为4×2,原始movies维度为5×2,直接相乘维度不匹配;将movies转置为2×5维度后,特征维度对齐,输出4×5的结果矩阵 - 结果矩阵中第i行第j列的取值,就是第i个用户和第j部电影的两个特征值相乘再求和的点积结果,和
expected的取值完全对应
内容的提问来源于stack exchange,提问作者Hans
相关产品推荐
相关产品推荐

