【问题标题】:Matlab: multiplying rows of a matrix by vector elementsMatlab:将矩阵的行乘以向量元素
【发布时间】:2015-12-06 19:18:36
【问题描述】:

v 为行向量(1 x n 矩阵),Mn x m 矩阵。 我使用以下代码创建一个“加权向量”(我希望 cmets 解释它应该做什么):

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 循环的情况下做到这一点?

【问题讨论】:

    标签: matlab matrix vectorization bsxfun


    【解决方案1】:

    如果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 的对应元素相乘(上面的V_il * M_lj 用于修复i),然后作为第一个索引的函数求和。

    结果是k 加权行向量,每个长度为m

    【讨论】:

    • 非常有用,谢谢! (我现在也觉得有点愚蠢,没有意识到这只是普通的矩阵乘法)。你碰巧知道这个操作的运行时间吗?
    • @NumRok only that it's as fast as it gets:) 如果可以使用矩阵运算,请使用它。如果不是,请使用 bsxfun 如果可行的话。如果不是,请使用循环。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-16
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    • 2011-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多