在matlab中用数字随机数生成矩阵

在matlab中用数字随机数生成矩阵,matlab,random,Matlab,Random,当在每列中我必须有40%的数字1和60%的数字0时,我如何在Matlab中创建一个具有数字1和0的随机分布的矩阵(20 X 12)?这一定是随机分布 有人能帮我吗 非常感谢 这可能是一种“激进”的方法- N = 10000;%%// A big number to choose 12 columns from A = round(rand(20,N)); out = A(:,find(sum(A,1)==round(0.4*size(A,1)),12)) 让我们知道这是否适用于您 这是一种稳健

当在每列中我必须有40%的数字1和60%的数字0时,我如何在Matlab中创建一个具有数字1和0的随机分布的矩阵(20 X 12)?这一定是随机分布

有人能帮我吗

非常感谢

这可能是一种“激进”的方法-

N = 10000;%%// A big number to choose 12 columns from
A = round(rand(20,N));
out = A(:,find(sum(A,1)==round(0.4*size(A,1)),12))

让我们知道这是否适用于您

这是一种稳健的方法,将每列的前40%设置为
1
,然后随机对每列重新排序

m=20;
n=12;
M = zeros(m,n);
M(1:round(m*0.4),:) = 1;

for col = 1:n
    M(:,col) = M(randperm(m), col);
end

一种有效的方法是:

  • 生成0和1之间均匀随机值的矩阵
  • 对于每列,计算40-
  • 对于每列,将低于或等于计算百分位的条目设置为1,其余条目设置为0。这确保了每列值的期望分数
  • 这可以通过和轻松完成:


    谢谢它起作用了,但N值大的目的是什么?我不明白它的用途!!基本上,我们正在创建一个大型矩阵(20xN),并从中选择满足40%标准的前12列。非常容易理解和使用,如果你问我:)是的,我得到了..你实际上选择了12列满足给定条件。限制N,比如说30,不能确保获得所需的条目数..正是,这就是为什么“侵略性”。完美..这个函数对我来说是新的..我将在帮助中查看。谢谢汉克·丹。我也使用了同样的方法,但是没有得到正确的输出。最后从你的回复中发现了我的错误。
    rows = 20;
    cols = 12;
    p = 40; %// percent of 1 values
    
    A = rand(rows,cols); %// uniform random values between 0 and 1
    perc = prctile(A,p); %// percentile of each column
    A = bsxfun(@le, A, perc); %// 1 if lower or equal than percentile, 0 otherwise