16.3 Матрицы специального назначения
- eye (n)
- eye (m, n)
- eye ([m n])
- eye (…, class)
-
Возвращает единичную матрицу.
Если вызывается с одним скалярным аргументом n, возвращает квадратную единичную матрицу NxN.
Если переданы два скалярных аргумента (m, n),
eyeинтерпретирует их как количество строк и столбцов. Если передан вектор с двумя элементами,eyeиспользует значения элементов соответственно как число строк и столбцов. Например:eye (3) ⇒ 1 0 0 0 1 0 0 0 1Следующие выражения дают один и тот же результат:
eye (2) ≡ eye (2, 2) ≡ eye (size ([1, 2; 3, 4]))
Необязательный аргумент class позволяет
eyeвернуть массив указанного типа, например,val = zeros (n,m, "uint8")
Вызов
eyeбез аргументов эквивалентен вызову с аргументом 1. Любые отрицательные размерности обрабатываются как нулевые. Эти необычные определения предназначены для совместимости с MATLAB.
- ones (n)
- ones (m, n)
- ones (m, n, k, …)
- ones ([m n …])
- ones (…, class)
-
Возвращает матрицу или N-мерный массив, элементы которого все равны 1.
Если вызывается с одним скалярным целочисленным аргументом n, возвращает квадратную матрицу NxN.
Если вызывается с двумя или более скалярными целочисленными аргументами или вектором целочисленных значений, возвращает массив с заданными размерами.
Для создания постоянной матрицы, значения элементов которой все одинаковы, используйте выражение вида
val_matrix = val * ones (m, n)
Необязательный аргумент class указывает класс возвращаемого массива и по умолчанию равен double. Например:
val = ones (m,n, "uint8")
См. также: zeros.
- zeros (n)
- zeros (m, n)
- zeros (m, n, k, …)
- zeros ([m n …])
- zeros (…, class)
-
Возвращает матрицу или N-мерный массив, элементы которого все равны 0.
Если вызывается с одним скалярным целочисленным аргументом, возвращает квадратную матрицу NxN.
Если вызывается с двумя или более скалярными целочисленными аргументами или вектором целочисленных значений, возвращает массив с заданными размерами.
Необязательный аргумент class указывает класс возвращаемого массива и по умолчанию равен double. Например:
val = zeros (m,n, "uint8")
См. также: ones.
- repmat (A, m)
- repmat (A, m, n)
- repmat (A, m, n, p …)
- repmat (A, [m n])
- repmat (A, [m n p …])
-
Повторение матрицы или N-мерного массива.
Создает блочную матрицу размера m на n, где каждый элемент — копия матрицы A.
Если n не указан, создается блочная матрица размера m на m. Для копирования по более чем двум измерениям укажите количество копий по каждому измерению m, n, p, … в векторе во втором аргументе.
- repelems (x, r)
-
Построение вектора из повторяющихся элементов из x.
r — целочисленная матрица 2xN, указывающая, какие элементы повторять и сколько раз повторять каждый элемент. Элементы в первой строке r(1,j) выбирают элемент для повторения. Соответствующий элемент во второй строке r(2,j) указывает количество повторений. Если x является матрицей, столбцы x представляются как расположенные друг над другом для целей индекса выбора. Возвращается строчный вектор.
Понятие результата рассчитывается следующим образом:
y = []; for i = 1:columns (r) y = [y, x(r(1,i)*ones(1, r(2,i)))]; endfor
- xxx = repelem (x, R)
- xxx = repelem (x, R_1, …, R_n)
-
Построение массива повторяющихся элементов из x и инструкций повторения R_1, ….
x должен быть скаляром, вектором или N-мерным массивом.
Инструкция повторения R_j должна быть либо скаляром, либо вектором. Если инструкция является скаляром, каждый компонент x в измерении j повторяется R_j раз. Если инструкция является вектором, она должна содержать такое же количество элементов, как и соответствующее измерение j из x. В этом случае k-й компонент измерения j повторяется
R_j(k)раз.Если x является скаляром или вектором, то
repelemможет быть вызван с одной инструкцией повторения R, иrepelemвернет вектор с той же ориентацией, что и входной.Если x является матрицей, должно быть указано по крайней мере два R_j.
Примечание: Использование
repelemс вектором x и вектором для R_j эквивалентно декодированию последовательности длин.Примеры:
A = [1 2 3 4 5]; B = [2 1 0 1 2]; repelem (A, B) ⇒ 1 1 2 4 5 5
A = magic (3) ⇒ A = 8 1 6 3 5 7 4 9 2 B1 = [1 2 3]; B2 = 2; repelem (A, B1, B2) ⇒ 8 8 1 1 6 6 3 3 5 5 7 7 3 3 5 5 7 7 4 4 9 9 2 2 4 4 9 9 2 2 4 4 9 9 2 2Могут быть указаны больше R_j, чем количество измерений x. Любые избыточные R_j должны быть скалярами (поскольку размер x в этих измерениях равен только 1), и x будет соответственно реплицирован в этих измерениях.
A = [1 2 3 4 5]; B1 = 2; B2 = [2 1 3 0 2]; B3 = 3; repelem (A, B1, B2, B3) ⇒ ans(:,:,1) = 1 1 2 3 3 3 5 5 1 1 2 3 3 3 5 5 ans(:,:,2) = 1 1 2 3 3 3 5 5 1 1 2 3 3 3 5 5 ans(:,:,3) = 1 1 2 3 3 3 5 5 1 1 2 3 3 3 5 5R_j должны быть указаны в порядке. Используется заполнитель 1 для измерений, которые не требуют репликации.
repelem ([-1, 0; 0, 1], 1, 2, 1, 2) ⇒ ans(:,:,1,1) = -1 -1 0 0 0 0 1 1 ans(:,:,1,2) = -1 -1 0 0 0 0 1 1Если указано меньше R_j, чем количество измерений в x,
repelemпредположит, что R_j равно 1 для этих измерений.A = cat (3, [-1 0; 0 1], [-1 0; 0 1]) ⇒ ans(:,:,1) = -1 0 0 1 ans(:,:,2) = -1 0 0 1 repelem (A,2,3) ⇒ ans(:,:,1) = -1 -1 -1 0 0 0 -1 -1 -1 0 0 0 0 0 0 1 1 1 0 0 0 1 1 1 ans(:,:,2) = -1 -1 -1 0 0 0 -1 -1 -1 0 0 0 0 0 0 1 1 1 0 0 0 1 1 1repelemсохраняет класс x и работает с строками, массивами ячеек, NA и NAN входными данными. Если какой-либо R_j равен 0, выходной массив будет пустым.repelem ("Octave", 2, 3) ⇒ OOOccctttaaavvveee OOOccctttaaavvveee repelem ([1 2 3; 1 2 3], 2, 0) ⇒ [](4x0)
Функции linspace и logspace очень упрощают создание векторов с равномерно или логарифмически распределенными элементами. См. Диапазоны.
- linspace (start, end)
- linspace (start, end, n)
-
Возвращает строчный вектор с n линейно распределенными элементами между start и end.
Если количество элементов больше одного, то конечные точки start и end всегда включаются в диапазон. Если start больше end, элементы хранятся в порядке убывания. Если количество точек не указано, используется значение 100.
Функция
linspaceвозвращает строчный вектор, когда оба start и end являются скалярами. Если один или оба входных значения являются векторами, тоlinspaceпреобразует их в столбцовые векторы и возвращает матрицу, где каждая строка представляет независимую последовательность междуstart(row_n), end(row_n).Для совместимости с MATLAB возвращает второй аргумент (end) при запросе только одного значения (n = 1).
- logspace (a, b)
- logspace (a, b, n)
- logspace (a, pi, n)
-
Возвращает строчный вектор с n элементами, логарифмически распределенными от 10^a до 10^b.
Если n не указано, оно по умолчанию равно 50.
Если b равно pi, точки находятся между 10^a и pi, а не между 10^a и 10^pi, чтобы обеспечить совместимость с соответствующей функцией MATLAB.
Также для совместимости с MATLAB возвращает правую границу диапазона (10^b) при запросе только одного значения.
См. также: linspace.
- rand (n)
- rand (m, n, …)
- rand ([m n …])
- v = rand ("state")
- rand ("state", v)
- rand ("state", "reset")
- v = rand ("seed")
- rand ("seed", v)
- rand ("seed", "reset")
- rand (…, "single")
- rand (…, "double")
-
Возвращает матрицу с случайными элементами, равномерно распределёнными на интервале (0, 1).
Аргументы обрабатываются так же, как и аргументы для
eye.Вы можете запросить состояние генератора псевдослучайных чисел в формате
v = rand ("state")Это возвращает столбец v длиной 625. Позже вы можете восстановить генератор псевдослучайных чисел в состояние v в формате
rand ("state", v)Вы также можете инициализировать вектор состояния произвольным вектором длиной ≤ 625 для v. Это новое состояние будет хэшем, основанным на значении v, а не на самом v.
По умолчанию генератор инициализируется из
/dev/urandom, если он доступен, в противном случае из времени CPU, времени реальных часов и текущей доли секунды. Обратите внимание, что это отличается от MATLAB, который всегда инициализирует состояние в одно и то же состояние при запуске. Чтобы получить поведение, аналогичное MATLAB, инициализируйте детерминированным вектором состояния в файлах запуска Octave (см. Файлы запуска).Для вычисления псевдослучайной последовательности,
randиспользует метод Мерсенна-Твистер с периодом 2^{19937}-1 (см. М. Мацумото и Т. Нисимура, Мерсенна-Твистер: 623-мерный равномерно распределённый генератор псевдослучайных чисел, ACM Trans. on Modeling and Computer Simulation том 8, № 1, стр. 3–30, январь 1998 г., http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html). Не используйте для криптографии без безопасного хэширования нескольких возвращаемых значений вместе, в противном случае состояние генератора может быть определено после чтения 624 последовательных значений.Более старые версии Octave использовали другой генератор псевдослучайных чисел. Новый генератор используется по умолчанию, так как он значительно быстрее старого генератора и генерирует случайные числа со значительно большим временем цикла. Однако в некоторых случаях может быть желательно получить те же случайные последовательности, что и в старых генераторах. Для этого используется ключевое слово
"seed", чтобы указать, что должны использоваться старые генераторы, как вrand ("seed", val)что устанавливает начальное значение генератора в val. Начальное значение генератора может быть запрошено с помощью
s = rand ("seed")Однако следует отметить, что запрос начального значения не заставит
randиспользовать старые генераторы, только установка начального значения. Чтобы заставитьrandснова использовать новые генераторы, ключевое слово"state"должно быть использовано для сброса состоянияrand.Состояние или начальное значение генератора может быть сброшено до нового случайного значения с помощью ключевого слова
"reset".Тип возвращаемого значения можно контролировать с помощью заключительного
"double"или"single"аргумента. Это единственные допустимые типы.
- randi (imax)
- randi (imax, n)
- randi (imax, m, n, …)
- randi ([imin imax], …)
- randi (…, "class")
-
Возвращает случайные целые числа в диапазоне 1:imax.
Дополнительные аргументы определяют форму возвращаемой матрицы. При отсутствии аргументов возвращается одно случайное целое число. Если задан один аргумент n, то возвращается квадратная матрица (n x n). Два или более аргументов вернут многомерную матрицу (m x n x …).
Диапазон целых чисел может быть описан матрицей из двух элементов с нижней и верхней границами, в этом случае возвращаемые целые числа будут в интервале [imin, imax].
Необязательный аргумент class вернет матрицу запрошенного типа. По умолчанию
"double".Следующий пример возвращает 150 целых чисел в диапазоне 1–10.
ri = randi (10, 150, 1)
Примечание к реализации:
randiв своей работе используетrand, которое использует тип"double"для представления чисел. Это ограничивает максимальное целое число (imax) и диапазон (imax - imin) значением, возвращаемым функциейflintmax. Для чисел с плавающей точкой IEEE это значение равно 2^{53} - 1.См. также: rand.
- randn (n)
- randn (m, n, …)
- randn ([m n …])
- v = randn ("state")
- randn ("state", v)
- randn ("state", "reset")
- v = randn ("seed")
- randn ("seed", v)
- randn ("seed", "reset")
- randn (…, "single")
- randn (…, "double")
-
Возвращает матрицу со случайными элементами, имеющими нормальное распределение с нулевым средним и единичной дисперсией.
Аргументы обрабатываются так же, как и аргументы для
rand.По умолчанию
randnиспользует «метод Зиггурата» Марсалья и Цанга для преобразования из равномерного распределения в нормальное.Тип возвращаемого значения можно контролировать с помощью заключительного
"double"или"single"аргумента. Это единственные допустимые типы.Ссылка: G. Marsaglia и W.W. Tsang, Метод Зиггурата для генерации случайных переменных, J. Statistical Software, том 5, 2000, https://www.jstatsoft.org/v05/i08/
- rande (n)
- rande (m, n, …)
- rande ([m n …])
- v = rande ("state")
- rande ("state", v)
- rande ("state", "reset")
- v = rande ("seed")
- rande ("seed", v)
- rande ("seed", "reset")
- rande (…, "single")
- rande (…, "double")
-
Возвращает матрицу со случайными элементами, распределенными экспоненциально.
Аргументы обрабатываются так же, как и аргументы для
rand.По умолчанию
randeиспользует «метод Зиггурата» Марсалья и Цанга для преобразования из равномерного распределения в экспоненциальное.Тип возвращаемого значения можно контролировать с помощью заключительного
"double"или"single"аргумента. Это единственные допустимые типы.Ссылка: G. Marsaglia и W.W. Tsang, Метод Зиггурата для генерации случайных переменных, J. Statistical Software, том 5, 2000, https://www.jstatsoft.org/v05/i08/
- randp (l, n)
- randp (l, m, n, …)
- randp (l, [m n …])
- v = randp ("state")
- randp ("state", v)
- randp ("state", "reset")
- v = randp ("seed")
- randp ("seed", v)
- randp ("seed", "reset")
- randp (…, "single")
- randp (…, "double")
-
Возвращает матрицу со случайными элементами, распределёнными по Пуассону со средним значением параметром, заданным первым аргументом, l.
Аргументы обрабатываются так же, как и аргументы для
rand, за исключением аргумента l.Используются пять различных алгоритмов в зависимости от диапазона l и того, является ли l скаляром или матрицей.
- Для скаляра l ≤ 12, используйте прямой метод.
-
W.H. Press и др., Численные рецепты на языке C, Издательство Кембриджского университета, 1992.
- Для скаляра l > 12, используйте метод отбраковки.
-
W.H. Press и др., Численные рецепты на языке C, Издательство Кембриджского университета, 1992.
- Для матрицы l ≤ 10, используйте метод обратного преобразования.
-
E. Stadlober и др., исходный код WinRand, доступный через FTP.
- Для матрицы l > 10, используйте метод отбраковки с наложением.
-
E. Stadlober и др., исходный код WinRand, доступный через FTP, или H. Zechner, Эффективное выборка из непрерывных и дискретных унимодальных распределений, докторская диссертация, 156 стр., Технический университет Грац, Австрия, 1994.
- Для l > 1e8, используйте приближение нормальным распределением.
L. Montanet и др., Обзор свойств частиц, Physical Review D 50 стр1284, 1994.
Тип возвращаемого значения можно контролировать с помощью заключительного
"double"или"single"аргумента. Это единственные допустимые типы.
- randg (a, n)
- randg (a, m, n, …)
- randg (a, [m n …])
- v = randg ("state")
- randg ("state", v)
- randg ("state", "reset")
- v = randg ("seed")
- randg ("seed", v)
- randg ("seed", "reset")
- randg (…, "single")
- randg (…, "double")
-
Возвращает матрицу с
gamma (a,1)распределёнными случайными элементами.Аргументы обрабатываются так же, как и аргументы для
rand, за исключением аргумента a.Это можно использовать для генерации различных распределений:
-
gamma (a, b)дляa > -1,b > 0 -
r = b * randg (a)
-
beta (a, b)дляa > -1,b > -1 -
r1 = randg (a, 1) r = r1 / (r1 + randg (b, 1))
Erlang (a, n)-
r = a * randg (n)
-
chisq (df)дляdf > 0 -
r = 2 * randg (df / 2)
-
t (df)для0 < df < inf(используйте randn, если df бесконечен) -
r = randn () / sqrt (2 * randg (df / 2) / df)
-
F (n1, n2)для0 < n1,0 < n2 -
## r1 equals 1 if n1 is infinite r1 = 2 * randg (n1 / 2) / n1 ## r2 equals 1 if n2 is infinite r2 = 2 * randg (n2 / 2) / n2 r = r1 / r2
- отрицательные
binomial (n, p)дляn > 0,0 < p <= 1 -
r = randp ((1 - p) / p * randg (n))
- нецентральные
chisq (df, L), дляdf >= 0иL > 0 -
(используйте chisq, если
L = 0)r = randp (L / 2) r(r > 0) = 2 * randg (r(r > 0)) r(df > 0) += 2 * randg (df(df > 0)/2)
Dirichlet (a1, … ak)-
r = (randg (a1), …, randg (ak)) r = r / sum (r)
Тип возвращаемого значения можно контролировать, добавив
"double"или"single"аргумент в конец.Эти типы являются единственно допустимыми.
-
Генераторы работают в новом или старом стиле вместе, смешивание двух стилей невозможно. Инициализация любого генератора с помощью "state" или "seed" приводит к переключению других генераторов на тот же стиль для будущих вызовов.
Состояние каждого генератора независимо, и вызовы разных генераторов могут быть вложены без влияния на конечный результат. Например,
rand ("state", [11, 22, 33]);
randn ("state", [44, 55, 66]);
u = rand (100, 1);
n = randn (100, 1); и
rand ("state", [11, 22, 33]);
randn ("state", [44, 55, 66]);
u = zeros (100, 1);
n = zeros (100, 1);
for i = 1:100
u(i) = rand ();
n(i) = randn ();
end дают эквивалентные результаты. Когда генераторы инициализируются в старом стиле с помощью "seed", только rand и randn независимы, поскольку старые rande, randg и randp генераторы делают вызовы к rand и randn.
Генераторы инициализируются случайными состояниями при запуске, поэтому последовательности случайных чисел не будут одинаковыми при каждом запуске Octave. 7 Если вам действительно нужно воспроизвести последовательность чисел точно, вы можете установить состояние или seed в определённое значение.
Если вызов осуществляется без аргументов, rand и randn возвращают один элемент случайной последовательности.
Оригинальные rand и randn функции используют Fortran-код из RANLIB, библиотеки Fortran-подпрограмм для генерации случайных чисел, скомпилированной Barry W. Brown и James Lovato из отдела биоматематики в Техасском университете, М.Д. Андерсонский онкологический центр, Хьюстон, TX 77030.
- randperm (n)
- randperm (n, m)
-
Возвращает строчный вектор, содержащий случайную перестановку
1:n.Если m указан, возвращает m уникальных элементов, выбранных без повторений из
1:n.Сложность — O(n) в памяти и O(m) во времени, если m < n/5, в этом случае используется также O(m) памяти. Случайность выполняется с использованием rand(). Все перестановки равновероятны.
См. также: perms.
Примечания
(7)
Старые версии rand и randn получают свои начальные семена из системных часов.
© 1996–2022 The Octave Project Developers
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
https://docs.octave.org/v5.2.0/Special-Utility-Matrices.html