【问题标题】:How to compare each matrix to mean and return value in Matlab如何在Matlab中将每个矩阵与平均值和返回值进行比较
【发布时间】:2015-03-25 11:57:31
【问题描述】:

例如让我们考虑

a = fix(8 * randn(10,5));

和mean(a) 会给我每列的平均值。

所以,我打算做的是将第一列的平均值与其每个内容进行比较,直到该列,然后继续下一列的平均值并与其每个内容进行比较。

我能够在此处获得此代码(我知道有多个 for 循环,但这是我能想到的最好的,任何替代答案都会被极大地接受)

if(ndims(a)==2)
    b = mean(a);
   for c = 1:size(a,2)
       for d = 1:size(a)
           for e = 1:size(b,2)
                if(a(d,c)>b(1,c))
                    disp(1);
                else
                    disp(false);
                end
           end
       end
   end

else
    disp('Input should be a 2D matrix');
end

我不知道这是否是正确的答案?谁能告诉我?

提前致谢。

【问题讨论】:

    标签: arrays matlab matrix mean


    【解决方案1】:

    您似乎想知道每个条目是否大于其列平均值。

    这可以通过bsxfun 高效完成:

    result = bsxfun(@gt, a, mean(a,1));
    

    例子:

    a =
         3     1     3     2
         5     2     3     1
         1     3     5     2
    

    mean(a,1) 给出的列均值是

    ans =
       3.000000000000000   2.000000000000000   3.666666666666667   1.666666666666667
    

    然后

    >> result = bsxfun(@gt, a, mean(a,1))
    result =
         0     0     0     1
         1     0     0     0
         0     1     1     1
    

    【讨论】:

    • 这很完美,但我能得到 -1 而不是 0 吗?
    • 这很简单:result = 2*bsxfun(@gt, a, mean(a,1))-1;
    【解决方案2】:

    如果您尝试做我认为的事情(如果列的平均值大于该列中的值,则打印一个,否则为零)您可以消除很多循环执行以下操作(使用您的相同a和b):

        for ii=1:length(b)
           c(:,ii) = b(ii) > a(:,ii);
        end
    

    c 将是您的 1 和 0 数组。

    【讨论】:

    • 这很完美,但我能得到 -1 而不是 0 吗?
    • 每当将比较分配给数组时,您只会得到 0 或 1(结果为 false 或 true)。如果你想在那里得到-1,你可以做类似于@Luis Mendo 建议的事情:c = 2*c - 1;一旦你退出 for 循环。
    猜你喜欢
    • 2015-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-02
    • 2017-08-15
    • 2015-03-12
    • 1970-01-01
    • 2014-03-16
    相关资源
    最近更新 更多