2016-01-21 104 views
0

我感兴趣的是与每列最小值在同一行的结果值(并且我有很多列,所以我想循环它们,或做rowfun,但我不知道如何得到'结果')。列的值,基于Matlab表中另一列的函数

表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

假设你的数据是同质的,你可以使用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)返回sma最初的元素A

<snip>

  • 如果A是一个矩阵,然后min(A)是包含各列的最小值的行向量。
相关问题