在matlab中有条件地复制行

时间:2013-07-05 13:38:20

标签: matlab

假设A是我的数据矩阵,它代表一个家庭的样本,其中第一行元素代表房屋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这样的单独矩阵),每个集合重复的次数由权重矩阵给出。

任何有关代码修改的帮助都会非常有用!

1 个答案:

答案 0 :(得分:0)

最简单的方法是:

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

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

请注意,这不是很有效,但如果您有一个非常大的数据集需要像这样经常复制,那么这只会是一个问题。对于几次一次性拍摄,这足够了。