【问题标题】:MATLAB: find means of other rows in a matrix without loopMATLAB:在没有循环的矩阵中查找其他行的平均值
【发布时间】:2016-02-17 04:42:49
【问题描述】:

我正在优化我的代码。现在我有一个 MxN 矩阵,我想生成一个平均 MxN 矩阵,它是其他行的平均值

例如:如果我有矩阵 A:

1 2 3

3 4 5

2 3 2

在新的矩阵 B 中,我希望每一行都是其他行的平均值。

平均(第 2 行,第 3 行)

平均(第 1 行,第 3 行)

平均(第 1 行,第 2 行)

我想了很多办法,但无法避免循环

    for row=1:3
        temp = A;
        temp(row,:) = [];
        B(row,:) = mean(temp);
    end

有什么想法吗?

【问题讨论】:

    标签: matlab optimization matrix vectorization mean


    【解决方案1】:

    简单的bsxfun -

    B = (bsxfun(@minus,sum(A,1),A))./(size(A,1)-1)
    

    诀窍是以向量化的方式从所有带有bsxfun 的行的总和中减去当前行,从而得到除当前行之外的所有行的总和。最后,将它们除以行数减去1,得到平均值。

    【讨论】:

    • 聪明的方式!摆脱“。”可能没问题。在“/”之前也是
    • @FF0605 一点也不! ./ 表示按元素除法,我们需要的是什么,而不是/ 的矩阵除法。
    • 我的意思是 (size(A,1)-1) 是一个单一的数字,所以它是否按元素并不重要:P 感谢您的智能解决方案!
    • 亲爱的 Divakar,我刚刚发布了另一个问题,以避免在矩阵中出现循环,您能看看吗?
    猜你喜欢
    • 2015-07-27
    • 1970-01-01
    • 2018-12-02
    • 1970-01-01
    • 2014-05-16
    • 1970-01-01
    • 2017-11-09
    • 1970-01-01
    • 2013-09-23
    相关资源
    最近更新 更多