複数の変数の値の組み合わせをカウントし、度数表にまとめる方法
7 views (last 30 days)
Show older comments
d個の二値変数xi( 下の例ではd=3) があって、それぞれランダムに値を取った生データ(左下の表に図示)が与えられた時、その値の組み合わせ({0,0,...,0}から{1,1,...1}のものまで)2^d通りの、サンプル数をカウントして、それを1×2^dのベクトルNとして格納したいのですが、方法が分かりません。
具体的な例を以下の図で示します。ここでは、左の元データの中で{x1,x2,x3}の組み合わせが{0,0,0}のものが1個、{0,0,1}のものが2個、というように数えて右の表のようにまとめるという操作をしたいと考えています。
0 Comments
Accepted Answer
michio
on 26 Sep 2019
こちらでどうぞ!
% ユニークな要素
items = [1,1,1;
1,1,0;
1,0,1;
0,1,1;
0,0,1;
0,1,0;
1,0,0;
0,0,0];
% ユニークな要素を適当に繰り返してサンプルデータ作成
% data: 50x3の配列
idx = randi(8,50,1);
data = items(idx,:);
% まず unique を行単位で適用
[udata,~,index] = unique(data,'rows');
% index は udata の各行が data の何行目に存在したかを示す配列
udata
%% 手法1:forループで
datacount1 = zeros(length(udata),1);
for ii=1:length(udata)
datacount1(ii) = sum(index==ii);
end
% 並べると見やすい?
[udata,datacount1]
%% accumarray で
datacount2 = accumarray(index,1);
% 並べると見やすい?
[udata,datacount2]
More Answers (0)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!