1

我必须从样本中生成一个城市的合成人口。我在电子表格中拥有样本人口的所有属性以及每个人的体重。
为了生成总体,我需要按照权重给出的次数重复每一行(一个人的信息)。我正在尝试将电子表格作为 matlab 中的矩阵读取,然后使用 repmat 根据其权重为​​样本中的每个人复制行。
我不太确定matlab语法。

4

2 回答 2

1

假设您的权重在一个数组w中,并且您的数据在一个矩阵中datamatrix ,您可以执行以下操作:

%read in your data
% w = weights of the rows
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 = datamatrix(idx,:);

这样做是为每一行生成与权重值一样多的索引。然后它只是从原始数据矩阵中选择给定的索引(导致行的复制)

于 2013-07-01T12:52:05.873 回答
0

假设您有一个向量count表示每个条目要重复多少次(count必须包含非负整数)。
因此,例如,如果count = [2 0 3 1]您将创建第一个条目的 2 个副本,第二个不创建副本,第三个条目的三个副本和第四个条目的 1 个副本。

如何做到这一点,给定count

>> ind = zeros( sum( count ) );
>> ind( cumsum([ 0 count(1:end-1) ] ) ) = 1:numel(count);
>> ind = cumsum(ind);
>> population = example( ind, : ); % create population matrix with count rows of each line in example.
于 2013-07-01T12:54:25.700 回答