用条件重复放置随机位置数集

时间:2014-03-06 01:47:20

标签: matlab random vector repeat

我有这组号码a=[1 2 3]。我想将这个数字随机地放入矩阵7 x 1中,数字1必须有2次,数字2必须有3次,数字3必须有2次。 序列不是必需的。答案看起来像。 b=[1 2 2 2 1 3 3]'

2 个答案:

答案 0 :(得分:3)

尝试randperm

a=[1 2 3];
samps = [1 1 2 2 2 3 3]; % specify your desired repeats
samps = samps(randperm(numel(samps))); % shuffle them
b = a(samps)

或者,您可以指定samps的每个元素的重复次数,并使用a来计算arrayfun,而不是明确指定samps

reps = [2 3 2];
sampC = arrayfun(@(x,y)x*ones(1,y),a,reps,'uni',0);
samps = [sampC{:}];
samps = samps(randperm(numel(samps))); % shuffle them
b = a(samps)

答案 1 :(得分:0)

%how often each value should occure
quantity=[2,2,3]
%values
a=[1,2,3]
l=[]
%get list of all values
for idx=1:numel(a)
 l=[l,ones(1,quantity(idx))*v(idx)]
end
%shuffle l
l=l(randperm(numel(l)))