如何比较表的每一行

时间:2017-11-29 08:04:54

标签: matlab struct comparison-operators for-in-loop

我想比较每一行表与同一表的每一行,以找到具有最低值的行。

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循环。故意第三行是最不重要的行,它是最终答案。在大表中,这是事先不知道的。

1 个答案:

答案 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);

结果将是相同的,你只消耗了更多的时间和周期。