2

A は、行の最初の要素が家の ID を表し、2 番目の列がその家の人の ID を持つ世帯のサンプルを表すデータ マトリックスであるとします。

A = [100 1 56;
     101 1 34;
     101 2 33; 
     102 1 22;
     102 2 55;
     102 3 2]

w = [3 2 1] % weight of each household to generate the synthetic population

サンプルを拡張して、出力が次のようになるような合成母集団を作成したいと思います。

100 1 56
100 1 56
100 1 56
101 1 34
101 2 33
101 1 34
101 2 33
102 1 22
102 2 55
102 3  2

次のコードを使用して、特定の重みに対してマトリックス内のすべての行を繰り返しました

cc = [0 cumsum(w)];
idx = zeros(1,sum(w));

for i=1:length(w)
   idx(cc(i)+1:cc(i+1))=i;
end
weighted_replicated_matrix = A (idx,:)

しかし、目的の出力を得るには、一連の行を繰り返す必要があります。行のセットの長さは世帯内の人数 (w のような別の行列である可能性があります) に依存し、各セットが繰り返される回数は重み行列によって与えられます。

コードの変更に関するヘルプは本当に役に立ちます!

4

1 に答える 1

0

最も簡単な方法は次のとおりです。

ids = unique(A(:,1));

B = [];
for ii = 1:numel(ids)
    B = [B; repmat( A(A(:,1)==ids(ii),:), w(ii),1)]; %#ok
end

これはあまり効率的ではありませんが、このように頻繁に複製する必要がある非常に大きなデータ セットがある場合にのみ問題になることに注意してください。1回限りのショットの場合、これで十分です。

于 2013-07-05T13:55:28.030 に答える