在matlab中使用数字随机数创建矩阵

时间:2014-03-18 12:41:13

标签: matlab random

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

有人可以帮助我吗?

非常感谢!

3 个答案:

答案 0 :(得分:4)

一种有效的方法是:

  1. 生成0到1之间的均匀随机值矩阵。
  2. 为每列计算40 - percentile
  3. 对于每列,将低于或等于计算百分位数的条目设置为1,并将其余条目设置为0。这确保了每列所需的分数值。
  4. 这可以通过prctilebsxfun轻松完成:

    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
    

答案 1 :(得分:1)

这是一个强大的方法,将每列的前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

答案 2 :(得分:0)

这可能是一个"积极的"方法 -

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))

请告诉我们这是否适合您!