我在Matlab中声明了以下矩阵:
EmployeeData =
1 20 100000 42 14
2 15 95000 35 14
3 18 70000 28 14
4 10 85000 35 14
5 10 40000 21 12
6 4 45000 14 8
7 3 50000 21 10
8 5 55000 21 14
9 1 25000 14 7
10 2 50000 21 9
42 4 100000 42 10
第1列代表身份证号码,2代表年份,3代表工资,4代表休假日,5代表病假。我试图找到列的最大值(在这种情况下是工资列),并打印出与该值相关联的ID。如果多个员工具有最大值,则应显示具有该最大值的所有ID。所以这就是我如何天真地实现一种方法:
>> maxVal = [];
>> j = 1;
>> for i = EmployeeData(:, 3)
if i == max(EmployeeData(:, 3))
maxVal = [maxVal EmployeeData(j, 1)];
end
j = j + 1;
end
但它在我的工作区变量中显示maxVal
为[]
,而不是我预期的[1 42]
。在disp(i)
上方的for
循环中插入if
进行调试后,我得到以下输出:
100000
95000
70000
85000
40000
45000
50000
55000
25000
50000
就像我预期的那样。但是,当我使用disp(i)
切换disp(j)
时,我的输出结果为:
1
我做错了什么?这应该不起作用吗?
答案 0 :(得分:2)
MATLAB for循环对行而不是列进行操作。你应该尝试用以下代码替换你的for循环:
for i = EmployeeData(:, 3)' % NOTE THE TRANSPOSE
...
end
编辑:请注意,如果没有forloop,你可以做你想做的事情:
maxVal = EmployeeData(EmployeeData(:,3) == max(EmployeeData(:,3)),1);
答案 1 :(得分:1)
这是你想要的吗?
>> EmployeeData(EmployeeData(:,3)==max(EmployeeData(:,3)),1)
ans =
1
42