2014-10-07 116 views
1

我有以下的矩阵在Matlab声明: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列表示ID号,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]如我所料。当在for循环的if上述调试插入disp(i),我得到下面的输出:

100000 
    95000 
    70000 
    85000 
    40000 
    45000 
    50000 
    55000 
    25000 
    50000 

就像我的预期。但是,当我转的是disp(i)disp(j),我得到这个对我的输出:

1 

我在做什么错?如果这不起作用?

+0

你的for循环只执行一次,我已经完成所有这些值,然后下降到j。 (:,3)不会运行每行的值,而是运行一次的列值。 – 2014-10-07 22:42:19

回答

2

MATLAB for循环对行而不是列进行操作。你应该尝试更换您的for循环:

for i = EmployeeData(:, 3)' % NOTE THE TRANSPOSE 
    ... 
end 

编辑:请注意,你可以做你想没有一个for循环做什么:

maxVal = EmployeeData(EmployeeData(:,3) == max(EmployeeData(:,3)),1); 
+0

这应该不会影响'j'是否增加或者不增加... – syb0rg 2014-10-07 22:30:58

+1

是的。如果你在一列上运行for循环,MATLAB将运行一遍for循环。如果你在一行上运行它,它将遍历行中的每个值。你甚至尝试过吗? – MrAzzaman 2014-10-07 22:32:22

+0

@ syb0rg支持MrAzzaman的声明,请参阅http://www.mathworks.co.uk/help/matlab/ref/for.html当* index *是* valArray * – Oleg 2014-10-07 22:41:52

1

这是你想要的吗?

>> EmployeeData(EmployeeData(:,3)==max(EmployeeData(:,3)),1) 
ans = 
    1 
    42