MATLAB - 生成一个rand值向量(每个值[0; 1]至少有X%零)?

时间:2018-05-30 11:56:39

标签: matlab

有人知道找回这样一个结果的有效方法吗?

我当然可以使用rand(n,1)然后通过用零遍历数组值来替换,直到零的数量足够。 (如上所述至少X%零,它也可以更多但不能更少)

我更喜欢完全随机分布,但是均匀分布也没问题。 (所以我不知道分布如何影响结果)

(目前使用MATLAB 2017a)

1 个答案:

答案 0 :(得分:2)

使用A=rand(n);生成随机向量,然后使用num = randi([n*proc,n]);计算出应该为0更改多少个数字(proc是应该为0的最小数字部分)。用A(1:num)=0;替换为0,然后用B = A(randperm(n));对数组进行洗牌。

总计:

A=rand(n);
proc = 0.3;
num = randi([n*proc,n]);
A(1:num)=0;
B = A(randperm(n));