如何在 Matlab 中将每个矩阵与平均值和返回值进行比较



例如,让我们考虑一下

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

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

提前谢谢。

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

这是通过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

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

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

c 将是你的 1 和 0 数组。