我感兴趣的是与每列的最小值在同一行的结果值(我有很多列,所以我想循环它们,或者做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)
谢谢!
答案 0 :(得分:1)
假设您的数据是同质的,您可以使用table2array
和min
的第二个输出来索引结果:
% 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)
是包含每列最小值的行向量。