Matlab并没有递增我的变量

时间:2014-10-07 22:27:53

标签: matlab debugging matrix max

我在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

我做错了什么?这应该不起作用吗?

2 个答案:

答案 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