2010-12-07 18 views
3

我有一個2-D矩陣,其中第一列包含實驗條件的索引,第二列包含相應實驗的索引,即[condition experiment]。每行對應一個有趣的事件(一個實驗可以產生一個或幾個事件)。在MATLAB中,如何計算與條件相關的索引值的唯一數目?

計數條件和事件很容易。我想知道如何計算每個給定條件下有多少獨特的實驗。

這是現在我已經用ACCUMARRAY的解決方案,但我覺得應該有一個更簡單或更優雅的解決方案:

idxList = [1 1;... %# There are two experiments for condition 1... 
      1 2;... 
      1 2;... 
      2 1;... %# ...and 1 experiment for condition 2. 
      2 1]; 
accumarray(idxList(:,1),idxList(:,2),[],@(x)length(unique(x))) 
ans = 
    2 
    1 

回答

2

這裏有幾個選擇:

  • 使用整個矩陣idxList的參數subsACCUMARRAY(即,指定累積的行和列索引),然後求和結果行中的非零數:

    experCounts = sum(accumarray(idxList,1) > 0,2); 
    
  • 使用UNIQUEidxList先去除重複行,從而簡化了調用ACCUMARRAY

    idxList = unique(idxList,'rows'); 
    experCounts = accumarray(idxList(:,1),1); 
    
+0

第一個解決方案是非常好的。謝謝! – Jonas 2010-12-07 14:57:31