列的值,基于Matlab表中另一列的函数

时间:2016-01-21 03:32:59

标签: matlab

我感兴趣的是与每列的最小值在同一行的结果值(我有很多列,所以我想循环它们,或者做rowfun但是我不知道怎么做然后得到“结果”。

表A

+----+------+------+----+------+------+--------+
| x1 | x2   | x3   | x4 | x5   | x6   | result |
+----+------+------+----+------+------+--------+
| 1  | 4    | 10   | 3  | 12   | 2    | 8      |
| 10 | 2    | 8    | 1  | 12   | 3    | 10     |
| 5  | 10   | 5    | 4  | 2    | 10   | 12     |
+----+------+------+----+------+------+--------+

解决方案

8   10  12  10  12  8

我知道我可以应用rowfun,但后来我不知道如何获得结果。 然后,我可以这样做,但不能遍历所有列:

A(cell2mat(A.x1) == min(cell2mat(A.x1)), 7)

我已经尝试了几种方法将它变成变量,但是我无法使其工作,所以:

A(cell2mat(variable) == min(cell2mat(variable)), 7)

谢谢!

1 个答案:

答案 0 :(得分:1)

假设您的数据是同质的,您可以使用table2arraymin的第二个输出来索引结果:

% Set up table
x1 = [1 10 5];
x2 = [4 2 10];
x3 = [10 8 5];
x4 = [3 1 4];
x5 = [12 12 2];
x6 = [2 3 10];
result = [8 10 12];
t = table(x1.', x2.', x3.', x4.', x5.', x6.', result.', ...
    'VariableNames', {'x1', 'x2', 'x3', 'x4', 'x5', 'x6', 'result'});

% Convert
A = table2array(t);
% When passed a matrix, min finds minimum of each column by default
% Exclude the results column, assumed to be the last
[~, minrow] = min(A(:, 1:end-1));

solution = t.result(minrow)'

返回:

solution =

     8    10    12    10    12     8

来自min的文档:

  

M = min(A)返回A的最小元素。

     

<snip>

     
      
  • 如果A是矩阵,则min(A)是包含每列最小值的行向量。
  •