MATLAB - Генерация вектора рандовых значений (каждое значение [0; 1] по крайней мере с X% нулей)? - PullRequest
0 голосов
/ 30 мая 2018

Кто-нибудь знает эффективный способ получения такого результата?

Конечно, я мог бы использовать rand (n, 1) и затем заменить, перебирая значения массива с нулями до тех пор, пока число нулей не станет достаточным,(как написано выше, по крайней мере, X% нулей, оно также может быть больше, но не меньше)

Я бы предпочел полностью случайное распределение, но также было бы хорошо равномерное распределение.(Таким образом, я понятия не имею, как распределение влияет на результат)

(в настоящее время используется MATLAB 2017a)

1 Ответ

0 голосов
/ 30 мая 2018

Используйте A=rand(n); для генерации случайного вектора, затем используйте num = randi([n*proc,n]);, чтобы выяснить, сколько чисел следует изменить на 0 (proc - это минимальная доля чисел, которая должна быть 0).Замените 0 на A(1:num)=0;, а затем перемешайте массив с B = A(randperm(n));.

Всего:

A=rand(n);
proc = 0.3;
num = randi([n*proc,n]);
A(1:num)=0;
B = A(randperm(n));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...