Создайте массивы случайных чисел

MATLAB® использует алгоритмы, чтобы сгенерировать pseudorandom и pseudoindependent числа. Эти числа не являются строго случайными и независимыми в математическом смысле, но они проходят различные статистические тесты случайности и независимости, и их вычисление может быть повторено в целях проверки или диагностики.

rand, randi, randn, и randperm функции являются основными функциями для создания массивов случайных чисел. rng функция позволяет вам управлять seed и алгоритмом, который генерирует случайные числа.

Функции случайных чисел

Существует четыре основные функции случайных чисел: rand, randi, randn, и randperm. rand функция возвращает вещественные числа от 0 до 1, которые рисуются из равномерного распределения. Для примера:

rng('default')
r1 = rand(1000,1);
r1 - вектор-столбец 1000 на 1, содержащая действительные числа с плавающей запятой, извлеченные из равномерного распределения. Все значения в r1 находятся в открытом интервале (0, 1). Гистограмма этих значений примерно плоская, что указывает на довольно равномерную выборку чисел.

randi функция возвращает double целочисленные значения, взятые из дискретного равномерного распределения. Для примера,

r2 = randi(10,1000,1);
r2 - вектор-столбец 1000 на 1, содержащее целое число значения, извлеченные из дискретного равномерного распределения, области значений которого находится в близком интервале [1, 10]. Гистограмма этих значений примерно плоская, что указывает на довольно равномерную выборку целых чисел между 1 и 10.

randn функция возвращает массивы вещественных чисел с плавающей запятой, которые взяты из стандартного нормального распределения. Для примера:

r3 = randn(1000,1);
r3 - вектор-столбец 1000 на 1, содержащая числа, взятые из стандартного нормального распределения. Гистограмма r3 выглядит как приблизительно нормальное распределение, среднее значение 0 и стандартное отклонение 1.

Вы можете использовать randperm функция для создания double массив случайных целочисленных значений, не имеющих повторяющихся значений. Для примера,

r4 = randperm(15,5);
r4 - массив 1 на 5, содержащий целые числа, случайным образом выбранные из области значений [1, 15]. В отличие от этого, randi, который может вернуть массив, содержащий повторные значения, массив, возвращенный randperm не имеет повторяющихся значений.

Последующие вызовы любой из этих функций возвращают различные результаты. Это поведение полезно для создания нескольких различных массивов случайных значений.

Генераторы случайных чисел

MATLAB предлагает несколько опций алгоритма генератора, которые суммируются в таблице.

ЗначениеИмя генератораКлючевое слово генератора
'twister'Вихрь Мерсенна (используется по умолчанию при запуске MATLAB)mt19937ar
'simdTwister'SIMD-ориентированный Fast Вихрь Мерсеннаdsfmt19937
'combRecursive'Комбинированное несколько рекурсивныхmrg32k3a
'multFibonacci'Мультипликативный Lagged Fibonaccimlfg6331_64
'philox'Генератор Philox 4x32 с 10 патронамиphilox4x32_10
'threefry'Трехфазный генератор 4x64 с 20 патронамиthreefry4x64_20
'v4'Устаревший генератор MATLAB версии 4.0mcg16807
'v5uniform'Стандартный генератор MATLAB версии 5.0swb2712
'v5normal'Устаревший генератор MATLAB версии 5.0 normalshr3cong

Используйте rng функция для установки seed и генератора, используемых rand, randi, randn, и randperm функций. Для примера, rng(0,'twister') установите генератор в состояние по умолчанию. Чтобы избежать повторения массивов случайных чисел при перезапуске MATLAB, смотрите, Почему Случайные Числа Повторяются После Запуска?

Для получения дополнительной информации о контроле состояния генератора случайных чисел, чтобы повторить вычисления с использованием тех же случайных чисел или чтобы гарантировать, что различные случайные числа используются в повторных вычислениях, смотрите Управление Генерацией случайных чисел.

Случайные числа данных

rand и randn функции генерируют значения двойной точности по умолчанию.

rng('default')
A = rand(1,5);
class(A)
ans = 'double'

Чтобы задать класс как double явным образом:

rng('default')
B = rand(1,5,'double');
class(B)
ans = 'double'
isequal(A,B)
ans = 
1

rand и randn может также сгенерировать значения в одной точности.

rng('default')
A = rand(1,5,'single');
class(A)
ans = 'single'

Значения те же, что и при приведении значений двойной точности из предыдущего примера. Случайный поток, из которого берутся функции, продвигается таким же образом независимо от того, какой класс значений возвращается.

A,B
A =
    0.8147    0.9058    0.1270    0.9134    0.6324


B =
    0.8147    0.9058    0.1270    0.9134    0.6324

randi поддерживает как целые типы, так и одинарную или двойную точность.

A = randi([1 10],1,5,'double');
class(A)
ans = 'double'
B = randi([1 10],1,5,'uint8');
class(B)
ans = 'uint8'

См. также

| | | |

Похожие темы