В MATLAB как подсчитать уникальное количество значений индекса, связанных с условием? - PullRequest
3 голосов
/ 07 декабря 2010

У меня есть двумерная матрица, содержащая в первом столбце индекс условия эксперимента, а во втором столбце индекс соответствующего эксперимента, т.е. [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 Ответ

2 голосов
/ 07 декабря 2010

Вот несколько альтернатив:

  • Используйте всю матрицу idxList для аргумента subs для ACCUMARRAY (т. Е. Укажите индексы строк и столбцов для накопления), затем суммируйте число ненулевых значений по строки результата:

    experCounts = sum(accumarray(idxList,1) > 0,2);
    
  • Сначала используйте UNIQUE на idxList, чтобы удалить дублирующиеся строки, что упрощает вызов ACCUMARRAY :

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