Как я случайным образом выбираю точки k из точек N в MATLAB?

Consolas для меня. Они были особенно разработаны для жидкокристаллического дисплея + механизм подсказки MS. Также Вы могли бы найти тюнер ClearType (MS PowerToy) большое дополнение, поскольку это дает Вам больше контроля тем, как смотрят Ваши шрифты.

10
задан gnovice 7 December 2009 в 06:06
поделиться

2 ответа

Есть два подхода. Первое решение - случайным образом выбрать k значений из N значений, что гарантирует, что вы всегда выбрали k точек. Второе решение - выбрать значения случайным образом, каждое из которых имеет среднюю вероятность p быть выбранным, что может дать всего 0 или столько же, сколько N выбирается случайным образом.

  • Выбор k из N значений:

    Вы можете использовать функцию RANDPERM , чтобы создать случайную перестановку целых чисел 1 - N , затем выберите первые k значений в переставленном списке и измените их отображение на красный:

     index = randperm (N);
    plot (x (index (1: k)), y (index (1: k)), 'r *');
    
  • Выбор значений со средней вероятностью p :

    Вы можете использовать функцию RAND , чтобы выбрать случайное значение от 0 до 1 для каждого из ваших N значений, затем выберите те, случайное значение которых меньше или равно вашей средней вероятности p , и отобразите их красным цветом:

     index = (рандом (N, 1) <= p);
    plot (x (индекс), y (индекс), 'r *');
    
27
ответ дан 3 December 2019 в 15:06
поделиться

Насколько я понял, для каждого из N случайная точка, в которую вы хотите подбросить монету, чтобы решить, выбирать ее или нет (где монета имеет p = 0. 25 вероятность успеха!)

data = rand(N,2);             %# generate random points
index = (rand(N,1) <= p);     %# roll coins to pick with prob p
data(~index, :) = [];         %# keep only selected points

Это в конечном итоге эквивалентно созданию только p * N случайных точек в первую очередь (по крайней мере, вы приближаетесь к этому числу как N становится больше) ...

data = rand(p*N, 2);          %# directly generate p*N number of points


вы можете проверить это последнее утверждение для различных значений N:

fprintf('1st = %d \n', p*N)
fprintf('2nd = %d \n', sum(rand(N,1) <= p))
3
ответ дан 3 December 2019 в 15:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: