【问题标题】:How to compare each rows of table如何比较表格的每一行
【发布时间】:2018-05-12 20:51:04
【问题描述】:

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

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 循环来做到这一点。故意第三行是价值最低的行,这是最终答案。在大表中,这是事先不知道的。

【问题讨论】:

  • “具有最低值的行”是什么意思?例如,这是否意味着该行的值之和最低?如果有多行具有相同的最小值呢?

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


【解决方案1】:

实际上,我认为您在这里错误地反转了列和行。无论如何,让我们举一个例子,为了简单起见,使用矩阵。

让我们从行开始:

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

结果是一样的,只是你消耗了更多的时间和周期。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多