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

在MATLAB中,如何计算与条件相关联的索引值的唯一数量?,matlab,count,indexing,unique,Matlab,Count,Indexing,Unique,我有一个二维矩阵,第一列包含实验条件的索引,第二列包含相应实验的索引,即[条件实验]。每行对应一个有趣的事件(一个实验可以产生一个或多个事件) 计算条件和事件很容易。我想知道如何计算每个给定条件下有多少独特的实验 这是我现在使用的解决方案,但我认为应该有一个更简单或更优雅的解决方案: idxList = [1 1;... %# There are two experiments for condition 1... 1 2;... 1 2;...

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

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

这是我现在使用的解决方案,但我认为应该有一个更简单或更优雅的解决方案:

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

以下是两个备选方案:

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

    experCounts = sum(accumarray(idxList,1) > 0,2);
    
  • 首先使用on
    idxList
    删除重复的行,这简化了对以下内容的调用:


第一种解决方案非常好。谢谢
idxList = unique(idxList,'rows');
experCounts = accumarray(idxList(:,1),1);