【问题标题】:Weighted sum of elements in matrix - Matlab?矩阵中元素的加权和 - Matlab?
【发布时间】:2011-08-29 06:34:42
【问题描述】:

我有两个50 x 6 矩阵,比如AB。我想为矩阵中列的每个元素分配权重 - 对列中较早出现的元素的权重更大,对同一列中稍后出现的元素的权重更小......同样适用于所有 6 列。像这样的:

cumsum(weight(row)*(A(row,col)-B(row,col)); % cumsum is for cumulative sum of matrix

我们如何在不使用循环的情况下有效地做到这一点?

【问题讨论】:

    标签: matlab matrix sum weighted


    【解决方案1】:

    如果您的权重向量 w50x1 向量,那么您可以将代码重写为

    cumsum(repmat(w,1,6).*(A-B))
    

    顺便说一句,我不知道您为什么要在循环中对标量进行 cumsum 操作...它没有效果。我假设您的意思是想要对整个矩阵进行处理。默认情况下,在矩阵上调用 cumsum 将沿每一列进行操作。如果您需要沿行进行操作,您应该使用可选的维度参数调用它作为cumsum(x,2),其中x 是您拥有的任何矩阵。

    【讨论】:

    • 谢谢!顺便说一句,我要找的是cumsum(repmat(w,1,6).*(A-B)),而不是sum(sum(repmat(w,1,6).*(A-B)))
    • @S_H:在这种情况下,这将是一个稍微好一点的选择:W=repmat(w,1,6);sum(W(:).*(A(:)-B(:))) 请注意,在这种情况下,只有一次调用函数 sum 而不是两次。虽然您可能不会注意到此示例有任何区别,但请记住这一点,尤其是当您使用更大的矩阵或循环时,额外的开销会变得很大。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多