有人知道找回这样一个结果的有效方法吗?
我当然可以使用rand(n,1)然后通过用零遍历数组值来替换,直到零的数量足够。 (如上所述至少X%零,它也可以更多但不能更少)
我更喜欢完全随机分布,但是均匀分布也没问题。 (所以我不知道分布如何影响结果)
(目前使用MATLAB 2017a)
答案 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));