如何生成10个数字,0或1,最多6个1?

时间:2017-10-08 05:47:39

标签: matlab

我想生成10个数字,可以是0或1,这样最多有6个1,其余的都是0。

怎么做?

2 个答案:

答案 0 :(得分:0)

您可以使用round(rand(10,1)+0.1)

调用rand(10,1)将为您提供10个实数,范围从0到1;加0.1以将预期平均值移至0.6,然后舍入所得到的仅获得0或1。

如果你真的想要限制数组中的1的数量,你可以重试rand()操作,直到得到6或更少的1:

num_sixes = 10;

while num_sixes > 6
    numbers = round(rand(10,1)+0.1);
    num_sixes = sum(numbers);
end

numbers % this will contain at most six 1s

答案 1 :(得分:-1)

使用zeros初始化所需的矩阵。然后使用randi生成您将获得的1的数量,并使用randperm来获取这些1的随机索引。最后使用matrix indexing将那些索引处的0替换为1。

N = 10;                %Total numbers to be generated
max1s = 6;             %Maximum number of 1s
ReqNum = zeros(N,1);   %Initialising with 0's
idx_of_1s = randperm(N, randi([1 max1s],1,1)); %Generating maximum 'max1s' indices for 1's
ReqNum(idx_of_1s) = 1; %Changing 0's at those indices to 1's