Matlab:将矩阵行乘以向量元素

3

假设 v 是一个行向量(1 x n 矩阵),M 是一个 n x m 的矩阵。 我用以下代码创建“加权向量”(希望注释可以解释它的作用):

weighted_M = bsxfun(@times,v',M);
%creates a matrix with the i-th row of M being weighted (multiplied) by the i-th element of v
weighted_v = sum(weighted_M);
%sums the columns of weighted_M

现在正题:我需要对很多输入向量 v 进行相同的计算。因此,我想要输入一个矩阵 V,其中包含向量 v 作为行,并输出包含加权向量的矩阵作为行。有没有不使用 for 循环就可以实现这个目标的方法?
1个回答

5

如果V的大小为[k,n]M的大小为[n,m],且您要查找k个加权向量,则可能只需执行以下操作:

weighted_vs = V*M;

其中一个元素等于

weighted_vs_ij = (V*M)ij = sum_l V_il * M_lj

首先您需要将M的每一行与V的对应元素相乘(对于固定的i,上面的公式为V_il * M_lj),然后按照第一个索引作为函数进行求和。
结果是k个加权行向量,每个向量的长度为m

1
非常有用,谢谢!(我现在感觉有点愚蠢,没有意识到这只是普通的矩阵乘法)。你知道这个操作的运行时间吗? - NumRok
2
@NumRok 只需要确保它能够做到最快:)如果使用矩阵运算可以实现,就用矩阵运算;如果不行但可以使用bsxfun,那就使用bsxfun;如果还是不行,就使用循环。 - Andras Deak -- Слава Україні

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接