Документация Engee

randn

Нормально распределенные случайные числа.

Библиотека

EngeeDSP

Синтаксис

Вызов функции

  • X = randn() — возвращает случайную скалярную величину, взятую из стандартного нормального распределения.

  • X = randn(n) — возвращает матрицу размером n×n нормально распределенных случайных чисел.

  • X = randn(sz1,…,szN) — возвращает массив случайных чисел размером sz1 × … × szN, где sz1,…,szN обозначают размер каждого измерения. Например, randn(3,4) возвращает матрицу размером 3×4.

  • X = randn(sz) — возвращает массив случайных чисел, где вектор размера sz определяет size(X). Например, randn([3, 4]) возвращает матрицу размером 3×4.

  • X = randn(___,typename) — возвращает массив случайных чисел типа typename. Входной параметр typename может быть "Float32" или "Float64". Можно использовать любую комбинацию входных аргументов, представленных в предыдущих примерах.

  • X = randn(___,like=p) — возвращает массив случайных чисел, подобных p, то есть имеющих тот же тип данных и тип чисел (вещественный или комплексный), что и p. Можно указать либо typename, либо like, но не оба одновременно.

  • X = randn(s,___) — генерирует числа из потока случайных чисел s вместо глобального потока по умолчанию. Для создания потока используйте RandStream. Можно указать s, а затем любую из комбинаций входных аргументов, представленных в предыдущих примерах.

Аргументы

Входные аргументы

# n — размер квадратной матрицы
целочисленное значение

Details

Размер квадратной матрицы, заданный как целое число.

Если n равно 0, то X — пустая матрица.

Типы данных

Float32, Float64, Int8, Int16, Int32, Int64, UInt8, UInt16, UInt32, UInt64

# sz1,…,szN — размер каждого измерения (в виде отдельных аргументов)
целочисленные значения

Details

Размер каждого измерения, заданный как отдельные аргументы целочисленных значений.

  • Если размер любого измерения равен 0, то X — пустой массив.

  • За пределами второго измерения функция randn игнорирует все последующие измерения с размером 1. Например, randn(3,1,1) создает вектор случайных чисел размером 3×1.

Типы данных

Float32, Float64, Int8, Int16, Int32, Int64, UInt8, UInt16, UInt32, UInt64

# sz — размер каждого измерения (в виде вектора-строки)
целочисленные значения

Details

Размер каждого измерения, заданный как вектор-строка целочисленных значений.

  • Если размер любого измерения равен 0, то X — пустой массив.

  • За пределами второго измерения randn игнорирует все последующие измерения с размером 1. Например, randn([3 1 1]) создает вектор случайных чисел размером 3×1.

Типы данных

Float32, Float64, Int8, Int16, Int32, Int64, UInt8, UInt16, UInt32, UInt64

# typename — тип данных (класс), который нужно создать
"Float64" (по умолчанию) | "Float32"

Details

Тип данных (класс), который нужно создать, может быть задан как "Float64", "Float32" или как имя другого класса, поддерживающего randn.

# s — поток случайных чисел
объект RandStream

Details

Поток случайных чисел, заданный как объект RandStream.

# p — прототип создаваемого массива
числовой массив

Details

Прототип создаваемого массива, заданный как числовой массив.

Типы данных

Float32, Float64

Поддержка комплексных чисел

Да

Выходные аргументы

# 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.