在MATLAB中,如何计算与条件关联的唯一索引值数?

时间:2010-12-07 02:56:07

标签: matlab count indexing unique

我有一个2-D矩阵,在第一列中包含实验条件的索引,在第二列中包含相应实验的索引,即[condition experiment]。每行对应一个有趣的事件(一个实验可以产生一个或多个事件)。

计算条件和事件很容易。我想知道如何计算每种给定条件下有多少独特的实验。

这是我现在使用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

1 个答案:

答案 0 :(得分:2)

以下是两种选择:

  • ACCUMARRAYidxList参数使用整个矩阵subs(即指定累加的行和列索引),然后求和非零的数量跨越结果的行:

    experCounts = sum(accumarray(idxList,1) > 0,2);
    
  • 首先在idxList上使用UNIQUE删除重复的行,这样可以简化对ACCUMARRAY的调用:

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