matlab中的条件行复制

matlab中的条件行复制,matlab,Matlab,假设A是我的数据矩阵,它表示一个家庭的样本,行的第一个元素表示房屋id,第二列表示该房屋中的人员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

假设A是我的数据矩阵,它表示一个家庭的样本,行的第一个元素表示房屋id,第二列表示该房屋中的人员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一样的单独矩阵),每组重复的次数由权重矩阵给出


关于代码修改的任何帮助都将非常有用

最简单的方法是:

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

B = [];
for ii = 1:numel(ids)
    B = [B; repmat( A(A(:,1)==ids(ii),:), w(ii),1)]; %#ok
end
请注意,这不是很有效,但只有当您有一个非常大的数据集需要经常这样复制时,这才是一个问题。对于几次一次性拍摄,这就足够了