MATLAB: Create random matrix with 4 vectors

matrix

How can I create a random matrix X that has n rows, and each row is [1 0 0], [0 1 0], [0 0 1] or [0 0 0]. On top of that, the first possibility has to appear x times, the second one y times and the third one again z times. In other words sum(X)= [x y z]?

Best Answer

a=[1 0 0; 0 1 0;0 0 1]
x=5
y=4
z=7
n=x+y+z
b=zeros(n,3)
ii1=randperm(n,x)
b(ii1,:)=repmat(a(1,:),x,1)
ii=setdiff(1:n,ii1)
ii2=ii(randperm(numel(ii),y))
b(ii2,:)=repmat(a(2,:),y,1)
ii=setdiff(ii,ii2)
b(ii,:)=repmat(a(3,:),z,1)