マトリックスに値が表示される回数をカウントする方法を知っていますか?
たとえば、平日(1-7)の値を格納する1500 x 1マトリックスM
(ベクトル)がある場合、日曜日(1)、月曜日(2)、... 、Saturdays(7)はM
?に格納されます
一意の要素を数えるために考えられるすべての方法のリストを次に示します。
M = randi([1 7], [1500 1]);
t = tabulate(M);
counts1 = t(t(:,2)~=0, 2);
counts2_1 = hist( M, numel(unique(M)) );
counts2_2 = histc( M, unique(M) );
counts3 = accumarray(M, ones(size(M)), [], @sum);
%# or simply: accumarray(M, 1);
[MM idx] = unique( sort(M) );
counts4 = diff([0;idx]);
counts5 = arrayfun( @(x)sum(M==x), unique(M) );
counts6 = sum( bsxfun(@eq, M, unique(M)') )';
counts7 = full(sparse(M,1,1));
1から7までのすべての値に対してこの操作を一度に実行する1つの方法は、関数 ACCUMARRAY を使用することです。
>> 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
wに週番号が含まれていると仮定します([1:7])
n = histc(M,w)
mの数値の範囲がわからない場合:
n = histc(M,unique(M))
コマンドによるSQLグループなどです。
これは、行列に対して操作を行う完璧な原因であり、答えは単一の数値でなければなりません
sum(sum(matrix==value))
これは、Matlab Central File Exchangeで利用可能な非常に優れた関数ファイルです。
この関数ファイルは完全にベクトル化されているため、非常に高速です。さらに、aioobeの答えで言及されている関数と比較して、この関数はaccumarray関数を使用しないため、Matlabの古いバージョンとも互換性があります。また、数値配列だけでなくセル配列でも機能します。
解決策:この関数は、組み込みのmatlab関数 "unique"と組み合わせて使用できます。
occurance_count = countmember(unique(M)、M)
happenance_countはunique(M)と同じサイズの数値配列であり、occurance_count配列の異なる値はunique(M)の対応する値(同じインデックス)のカウントに対応します。