我想比较每一行表与同一表的每一行,以找到具有最低值的行。
F=table(a,b,c,d)
a=[1 2 1 3, 8 3 1 6]'
b=[3 2 1 3]'
c=[7 9 1 8]'
d=[4 6 1 6]'
我怎样才能使用for循环。故意第三行是最不重要的行,它是最终答案。在大表中,这是事先不知道的。
答案 0 :(得分:0)
实际上,我认为你在这里错误地反转了列和行。无论如何,让我们用两者作为例子,为了简单起见使用矩阵。
让我们从行开始:
A = [
1 2 1 3;
8 3 1 6;
3 2 1 3;
7 9 1 8;
4 6 1 6
];
rows_sum = sum(A,2); % row-wise summation
[rows_sum_min,rows_sum_min_idx] = min(rows_sum);
变量rows_sum_min
将包含最小值(在这种情况下为7
),而变量rows_sum_min_idx
将包含与最小值对应的行索引(1
在这种情况下,第一行)。
现在列:
A = [
1 2 1 3;
8 3 1 6;
3 2 1 3;
7 9 1 8;
4 6 1 6
];
cols_sum = sum(A,1); % column-wise summation
[cols_sum_min,cols_sum_min_idx] = min(cols_sum);
变量cols_sum_min
将包含最小值(在这种情况下为3
),而变量cols_sum_min_idx
将包含与最小值对应的行索引(3
在这种情况下,第三栏)。
我不知道你为什么要使用for循环,因为使用Matlab编码时的主要目标是尽可能地向量化计算以获得更好的性能。无论如何,如果你真的想要一个for循环...这里是列的例子:
A = [
1 2 1 3;
8 3 1 6;
3 2 1 3;
7 9 1 8;
4 6 1 6
];
[n,m] = size(A);
cols_sum = zeros(1,m);
for i = 1:n
cols_sum = cols_sum + A(i,:);
end
[cols_sum_min,cols_sum_min_idx] = min(cols_sum);
结果将是相同的,你只消耗了更多的时间和周期。