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



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

有人能帮我吗?

非常感谢!

有效的方法是:

  1. 生成0 ~ 1之间均匀随机值的矩阵
  2. 为每一列计算40百分位数。
  3. 对于每一列,将小于或等于计算百分位数的条目设置为1,其余条目设置为0。这保证了每列值的期望分数。

这可以很容易地完成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

这里有一个鲁棒的方法,将每列的前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

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

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

让我们知道这是否适合你!

最新更新