2014-10-07 115 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