STAN是否支持矩阵逐行与向量按元素相乘的无循环方法?
在Stan中实现矩阵每行与向量逐元素相乘(无循环)
当然有不用循环的实现方式,Stan支持广播机制,直接借助逐元素乘法运算符 .* 就能完成。
代码示例
假设你的矩阵和向量定义如下,一行代码就能得到结果:
// 定义输入矩阵和向量 matrix[2,3] A = [[1,2,3], [4,5,6]]; vector[3] v = [2,4,6]'; // 核心运算:矩阵每行与向量逐元素相乘 matrix[2,3] result = A .* v;
原理说明
Stan的广播规则会自动把长度为N的列向量,扩展成与M×N矩阵维度匹配的矩阵(每一行都是原向量的复制),此时用逐元素乘法 .* 运算,就等价于原矩阵的每一行和原向量按元素逐一相乘。
结果验证
运行上述代码后,result 的值为:
[[2, 8, 18], [8, 20, 36]]
(注:你给出的期望结果里第二行中间值应为20,是5×4的结果,推测是笔误)
如果你的向量是行向量形式,需要先转置为列向量再进行运算,否则会触发维度不匹配错误。
内容的提问来源于stack exchange,提问作者Canadian_Marine
相关产品推荐
相关产品推荐

