我想生成10个数字,可以是0或1,这样最多有6个1,其余的都是0。
怎么做?
答案 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