Как я могу считать число элементов данного значения в матрице?

Кто-либо знает, как считать количество раз, значение появляется в матрице?

Например, если у меня есть матрица 1500 x 1 M (вектор), который хранит значения рабочих дней (1 - 7), как я мог рассчитать, в скольких хранятся воскресенья (1), понедельники (2)..., субботы (7) M?

72
задан gnovice 21 May 2010 в 13:38
поделиться

3 ответа

См. Определение и подсчет уникальных значений массива .

Или, чтобы подсчитать количество вхождений 5 , просто выполните

sum(your_matrix == 5)
97
ответ дан 24 November 2019 в 12:31
поделиться

Один из способов выполнить эту операцию для всех значений с 1 по 7 одновременно - это использовать функцию АККУММАРС :

>> M = randi(7,1500,1);  %# Some random sample data with the values 1 through 7
>> dayCounts = accumarray(M,1)  %# Will return a 7-by-1 vector

dayCounts =

   218       %# Number of Sundays
   200       %# Number of Mondays
   213       %# Number of Tuesdays
   220       %# Number of Wednesdays
   234       %# Number of Thursdays
   219       %# Number of Fridays
   196       %# Number of Saturdays
10
ответ дан 24 November 2019 в 12:31
поделиться

Вот список всех возможных способов подсчета уникальных элементов:

M = randi([1 7], [1500 1]);

Вариант 1: табуляция

t = tabulate(M);
counts1 = t(t(:,2)~=0, 2);

Вариант 2: hist / histc

counts2_1 = hist( M, numel(unique(M)) );
counts2_2 = histc( M, unique(M) );

Вариант 3: аккумулятор

counts3 = accumarray(M, ones(size(M)), [], @sum);
%# or simply: accumarray(M, 1);

Вариант 4: sort / diff

[MM idx] = unique( sort(M) );
counts4 = diff([0;idx]);

Вариант 5: arrayfun

counts5 = arrayfun( @(x)sum(M==x), unique(M) );

Вариант 6: bsxfun

counts6 = sum( bsxfun(@eq, M, unique(M)') )';

Вариант 7: разреженный

counts7 = full(sparse(M,1,1));
73
ответ дан 24 November 2019 в 12:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: