如何将每个矩阵与 Matlab 中的均值和 return 值进行比较
How to compare each matrix to mean and return value in 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 数组。
例如让我们考虑
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 数组。