randn
Нормально распределенные случайные числа.
| Библиотека |
|
Синтаксис
Вызов функции
-
X = randn()— возвращает случайную скалярную величину, взятую из стандартного нормального распределения.
Аргументы
Входные аргументы
#
sz1,…,szN —
размер каждого измерения (в виде отдельных аргументов)
целочисленные значения
Details
Размер каждого измерения, заданный как отдельные аргументы целочисленных значений.
-
Если размер любого измерения равен
0, тоX— пустой массив. -
За пределами второго измерения функция
randnигнорирует все последующие измерения с размером1. Например,randn(3,1,1)создает вектор случайных чисел размером3×1.
| Типы данных |
|
#
sz —
размер каждого измерения (в виде вектора-строки)
целочисленные значения
Details
Размер каждого измерения, заданный как вектор-строка целочисленных значений.
-
Если размер любого измерения равен
0, тоX— пустой массив. -
За пределами второго измерения
randnигнорирует все последующие измерения с размером1. Например,randn([3 1 1])создает вектор случайных чисел размером3×1.
| Типы данных |
|
#
typename —
тип данных (класс), который нужно создать
"Float64" (по умолчанию) | "Float32"
Details
Тип данных (класс), который нужно создать, может быть задан как "Float64", "Float32" или как имя другого класса, поддерживающего randn.
#
s —
поток случайных чисел
объект RandStream
Details
Поток случайных чисел, заданный как объект RandStream.
#
p —
прототип создаваемого массива
числовой массив
Details
Прототип создаваемого массива, заданный как числовой массив.
| Типы данных |
|
| Поддержка комплексных чисел |
Да |
Выходные аргументы
#
X —
выходной массив
скаляр | вектор | матрица | многомерный массив
Details
Выходной массив, возвращаемый в виде скаляра, вектора, матрицы или многомерного массива.
Примеры
Матрица случайных чисел
Details
Сгенерируем матрицу 5×5 нормально распределенных случайных чисел.
import EngeeDSP.Functions: randn
r = randn(5)
5×5 Matrix{Float64}:
2.97447 -0.106555 2.02373 0.296171 0.733738
-0.622585 -0.215161 0.777789 1.20078 0.120332
1.9203 0.47349 -0.548902 1.09017 1.13633
0.961149 1.36564 -0.126011 -0.358703 -0.686773
-0.557803 -1.6378 0.29958 -0.129928 0.471683
Двумерное нормальное распределение случайных чисел
Details
Сгенерируем значения на основе двумерного нормального распределения с заданным вектором математического ожидания и ковариационной матрицей.
import EngeeDSP.Functions: randn
using LinearAlgebra
mu = [1 2]
sigma = [1 0.5; 0.5 2]
R = cholesky(sigma).U
z = repeat(mu, 10, 1) + randn(10, 2) * R
10×2 Matrix{Float64}:
1.6715 3.51099
-0.207487 -0.121175
1.71724 0.944637
2.63024 1.74425
1.48889 -1.65047
2.03469 4.42014
1.72689 2.79363
0.696559 0.849603
1.29387 3.95967
0.212717 -0.657765
Трехмерный массив случайных чисел
Details
Создадим массив случайных чисел размером 3×2×3.
import EngeeDSP.Functions: randn
X = randn([3,2,3])
3×2×3 Array{Float64, 3}:
[:, :, 1] =
-0.102242 0.312859
-0.241447 -0.86488
0.319207 -0.0300513
[:, :, 2] =
-0.164879 1.10927
0.627707 -0.863653
1.09327 0.0773591
[:, :, 3] =
-1.21412 1.53263
-1.1135 -0.769666
-0.00684933 0.371379
Указание типа данных случайных чисел
Details
Создадим вектор случайных чисел размером 1×4, элементы которого имеют одинарную точность.
import EngeeDSP.Functions: randn
r = randn(1,4,"Float32")
1×4 Matrix{Float32}:
-0.225584 1.11736 -1.08906 0.0325575
typeof(r)
Matrix{Float32}
Размер определяется существующим массивом
Details
Создадим матрицу нормально распределенных случайных чисел того же размера, что и существующий массив.
import EngeeDSP.Functions: randn
A = [3 2; -2 1]
sz = size(A)
X = randn(sz...)
2×2 Matrix{Float64}:
-0.615602 -0.192419
0.748077 0.88861
Распространенной практикой является объединение двух предыдущих строк кода в одну.
X = randn(size(A)...);
Размер и тип данных определяются существующим массивом
Details
Создадим матрицу 2×2 случайных чисел одинарной точности.
p = Float32[3 2; -2 1];
Создадим массив случайных чисел того же размера и типа данных, что и p.
X = randn(size(p)...,like=p)
2×2 Matrix{Float32}:
0.197811 -0.804466
1.5877 0.696624
typeof(X)
Matrix{Float32}
Дополнительно
Стандартные вещественные и стандартные комплексные нормальные распределения
Details
При генерации случайных действительных чисел функция randn генерирует данные, которые соответствуют стандартному нормальному распределению:
Здесь — случайная вещественная величина с математическим ожиданием и дисперсией .
При генерации случайных комплексных чисел, например, при использовании команды randn(…,like=1im), функция randn генерирует данные, которые соответствуют стандартному комплексному нормальному распределению:
Здесь — случайная комплексная величина, вещественная и мнимая части которой являются независимыми нормально распределенными случайными величинами с математическим ожиданием и дисперсией .
Генератор псевдослучайных чисел
Details
В основе генератора чисел randn лежит псевдослучайный генератор, создающий детерминированную последовательность чисел, которая кажется случайной. Эти числа предсказуемы, если известны начальное число и детерминированный алгоритм генератора. Хотя генерируемые числа не являются истинно случайными, они проходят различные статистические тесты на случайность, удовлетворяя условию независимости и одинакового распределения, оправдывая название псевдослучайные.
Советы
Последовательность чисел, генерируемых функцией randn, определяется внутренними настройками универсального генератора псевдослучайных чисел, лежащего в основе функций rand, randi и randn.