複数の変数の値の組み​合わせをカウントし、​度数表にまとめる方法

6 次查看(过去 30 天)
Kohei Ouchi
Kohei Ouchi 2019-9-26
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個、というように数えて右の表のようにまとめるという操作をしたいと考えています。

采纳的回答

michio
michio 2019-9-26
こちらでどうぞ!
% ユニークな要素
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]
  4 个评论
michio
michio 2019-9-26
编辑:michio 2019-9-26
言葉で説明すると違いが難しいですね。失礼しました。
[C, ia, ic] = unique(A)
を例にとると
  • C: ユニークな要素
  • ia: Cの各要素が A で上から何要素目に初めて登場するか
  • ic: Aの各要素がCの何要素目に対応するか
というべきでしょうか。
必然的に ia は C 同じ行数、ic は A と同じ行数になります。
Kohei Ouchi
Kohei Ouchi 2019-9-26
なるほど、理解できました。
丁寧に教えて頂き、本当にありがとうございます。

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Logical 的更多信息

产品


版本

R2019a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!