如何在R中实现矩阵行与对应向量行元素逐行相乘?
在R语言中实现矩阵行与对应向量元素相乘
刚好碰到过类似的需求,其实用R自带的向量化运算就能轻松搞定,不需要复杂的循环或者函数。先看你的示例数据:
# 定义2×2矩阵 w1 <- matrix(c(0,1, 2, 3), ncol = 2) # 定义2×1向量 v1 <- matrix(c(0, 6), ncol = 1)
你的需求是让矩阵的每一行,和向量中对应行的元素相乘——也就是第一行所有元素乘v1的第一行,第二行所有元素乘v1的第二行。最简洁的方法就是直接用乘法运算符*:
# 直接相乘即可得到期望结果 result <- w1 * v1 print(result)
运行这段代码后,输出就是你想要的:
[,1] [,2] [1,] 0 0 [2,] 6 18
原理说明
这其实是利用了R的维度广播机制:当你对维度不同但兼容的对象做算术运算时,R会自动将小维度的对象扩展成和大维度对象一致的结构,再进行元素级运算。这里v1是2×1的矩阵,w1是2×2的矩阵,R会自动把v1复制成2×2的矩阵(每一列都是原来的v1),然后和w1对应位置的元素相乘,正好实现了每行对应乘向量元素的效果。
如果你习惯用更“显式”的写法,也可以通过转置来实现,结果是一样的:
result <- t(t(w1) * v1)
不过显然直接相乘的写法更简洁高效,推荐优先使用这种方式。
内容的提问来源于stack exchange,提问作者Vedda
相关产品推荐
相关产品推荐

