我现在想用matlab生成这样一个矩阵Z:Z是一个n*m的矩阵(比如说这里n=200,m=5),最开始Z=zeros(n,m),现在我要在矩阵的某些地方赋值为1,具体的:最终我要保证矩阵的每一列相加等于一个确定的数,这个数来源于之前的多项分布,例如:N=mnrnd(n,P),这里的P是m*1的向量,代表概率,举个具体的例子:假设N=[24 22 33 63 58],那么矩阵Z的第一列所有值相加应该等于24,第二列等于22 ,第三列等于33,以此类推。接下来的一步是,由于Z是0、1feature的矩阵,对于第一列我要把24个1随机分配到200行中,然后对于第二列我要把22个1随机分配到剩余的176(200-24)行中,对于第三列,把33个1随机分配到剩余154(176-22)行中,依次类推。
我把我已有的程序写上:
P=1+rand(m,1);P=P/sum(P); %生成P向量,m*1维的,且相加等于1
N=mnrnd(n,P); %生成多项分布
Z=zeros(n,m)
for j=1:m
sum(Z(:,j))=N(j)
接下来就不会写了。。。。。跪求各位高人指点,在下感激不尽!!!
PS:不知道我SAS专版的好友们有没有精通matlab的。。。