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

7 visualizaciones (últimos 30 días)
Kohei Ouchi
Kohei Ouchi el 26 de Sept. de 2019
Comentada: Kohei Ouchi el 26 de Sept. de 2019
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個、というように数えて右の表のようにまとめるという操作をしたいと考えています。

Respuesta aceptada

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

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Logical en Help Center y File Exchange.

Productos


Versión

R2019a

Community Treasure Hunt

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

Start Hunting!