16.2 Перестановка матриц ¶
-
:
B =fliplr(A)¶ -
Переворачивает массив слева направо.
Возвращает копию A с обратным порядком столбцов. Другими словами, A переворачивается слева направо относительно вертикальной оси. Например:
fliplr ([1, 2; 3, 4]) ⇒ 2 1 4 3
-
:
B =flipud(A)¶ -
Переворачивает массив вверх ногами.
Возвращает копию A с обратным порядком строк. Другими словами, A переворачивается вверх ногами относительно горизонтальной оси. Например:
flipud ([1, 2; 3, 4]) ⇒ 3 4 1 2
-
:
B =flip(A)¶ -
:
B =flip(A, dim)¶ -
Возвращает копию массива A, перевернутого по размерности dim.
Если dim не указан, по умолчанию используется первая размерность, отличная от единицы.
Примеры:
## row vector flip ([1 2 3 4]) ⇒ 4 3 2 1 ## column vector flip ([1; 2; 3; 4]) ⇒ 4 3 2 1 ## 2-D matrix along dimension 1 flip ([1 2; 3 4]) ⇒ 3 4 1 2 ## 2-D matrix along dimension 2 flip ([1 2; 3 4], 2) ⇒ 2 1 4 3См. также: fliplr, flipud, rot90, rotdim, permute, транспонировать.
-
:
B =rot90(A)¶ -
:
B =rot90(A, k)¶ -
Поворот массива на 90 градусов.
Возвращает копию A с элементами, повернутыми против часовой стрелки на 90 градусов.
Второй аргумент необязателен и определяет, на сколько 90-градусных поворотов нужно применить (по умолчанию 1). Отрицательные значения k поворачивают матрицу по часовой стрелке. Например,
rot90 ([1, 2; 3, 4], -1) ⇒ 3 1 4 2поворачивает заданную матрицу по часовой стрелке на 90 градусов. Следующие выражения эквивалентны:
rot90 ([1, 2; 3, 4], -1) rot90 ([1, 2; 3, 4], 3) rot90 ([1, 2; 3, 4], 7)
Поворот всегда выполняется в плоскости первых двух размерностей, то есть строк и столбцов. Чтобы выполнить поворот в любой другой плоскости, используйте
rotdim.
-
:
B =rotdim(A)¶ -
:
B =rotdim(A, n)¶ -
:
B =rotdim(A, n, plane)¶ -
Возвращает копию A с элементами, повернутыми против часовой стрелки на 90 градусов.
Второй аргумент n необязателен и определяет, на сколько 90-градусных поворотов нужно применить (по умолчанию 1). Отрицательные значения n поворачивают матрицу по часовой стрелке.
Третий аргумент также необязателен и определяет плоскость поворота. Если он присутствует, plane — это вектор из двух элементов, содержащий две разные допустимые размерности матрицы. Если plane не задан, используются первые две размерности, отличные от единицы.
Например,
rotdim ([1, 2; 3, 4], -1, [1, 2]) ⇒ 3 1 4 2поворачивает заданную матрицу по часовой стрелке на 90 градусов. Следующие выражения эквивалентны:
rotdim ([1, 2; 3, 4], -1, [1, 2]) rotdim ([1, 2; 3, 4], 3, [1, 2]) rotdim ([1, 2; 3, 4], 7, [1, 2])
-
:
A =cat(dim, array1, array2, …, arrayN)¶ -
Возвращает конкатенацию N-мерных массивов array1, array2, …, arrayN по размерности dim.
A = ones (2, 2); B = zeros (2, 2); cat (2, A, B) ⇒ 1 1 0 0 1 1 0 0В качестве альтернативы, можно выполнить конкатенацию A и B по второй размерности следующим образом:
[A, B]
dim может быть больше размерностей N-мерных массивов, и результат будет иметь размерность dim, как показывает следующий пример:
cat (4, ones (2, 2), zeros (2, 2)) ⇒ ans(:,:,1,1) = 1 1 1 1 ans(:,:,1,2) = 0 0 0 0
-
:
A =horzcat(array1, array2, …, arrayN)¶ -
Возвращает горизонтальную конкатенацию N-мерных массивов array1, array2, …, arrayN по размерности 2.
Массивы также можно конкатенировать по горизонтали, используя синтаксис для создания новых матриц. Например:
A = [ array1, array2, ... ]
Этот синтаксис немного эффективнее, так как парсер Octave может конкатенировать массивы без накладных расходов вызова функции.
-
:
A =vertcat(array1, array2, …, arrayN)¶ -
Возвращает вертикальную конкатенацию N-мерных массивов array1, array2, …, arrayN по размерности 1.
Массивы также можно конкатенировать по вертикали, используя синтаксис для создания новых матриц. Например:
A = [ array1; array2; ... ]
Этот синтаксис немного эффективнее, так как парсер Octave может конкатенировать массивы без накладных расходов вызова функции.
-
:
B =permute(A, perm)¶ -
Возвращает обобщенную транспонирование для N-мерного массива A.
Вектор перестановки perm должен содержать элементы
1:ndims (A)(в любом порядке, но каждый элемент должен встречаться только один раз). N-я размерность A отображается на размерностьPERM(N). Например:x = zeros ([2, 3, 5, 7]); size (x) ⇒ 2 3 5 7 size (permute (x, [2, 1, 3, 4])) ⇒ 3 2 5 7 size (permute (x, [1, 3, 4, 2])) ⇒ 2 5 7 3 ## The identity permutation size (permute (x, [1, 2, 3, 4])) ⇒ 2 3 5 7
См. также: ipermute.
-
:
B =reshape(A, m, n, …)¶ -
:
B =reshape(A, [m n …])¶ -
:
B =reshape(A, …, [], …)¶ -
:
B =reshape(A, size)¶ -
Возвращает матрицу с заданными размерами (m, n, …) элементы которой взяты из матрицы A.
Элементы матрицы извлекаются в порядке следования столбцов (как хранятся массивы Fortran).
Следующий код демонстрирует преобразование одномерного вектора 1x4 в квадратную матрицу 2x2.
reshape ([1, 2, 3, 4], 2, 2) ⇒ 1 3 2 4Обратите внимание, что общее количество элементов в исходной матрице (
prod (size (A))) должно совпадать с общим количеством элементов в новой матрице (prod ([m n …])).Один из размеров возвращаемой матрицы может быть не указан, и Octave определит его размер автоматически. Для обозначения не указанного размера используется пустая матрица ([]).
-
:
B =resize(A, m)¶ -
:
B =resize(A, m, n, …)¶ -
:
B =resize(A, [m n …])¶ -
Изменяет размер A, отбрасывая элементы по мере необходимости.
В результате элемент с определенными индексами равен соответствующему элементу A, если индексы находятся в пределах границ A; в противном случае элемент устанавливается в ноль.
Другими словами, операция
B = resize (A, dv)
эквивалентна следующему коду:
B = zeros (dv, class (A)); sz = min (dv, size (A)); for i = 1:length (sz) idx{i} = 1:sz(i); endfor B(idx{:}) = A(idx{:});но выполняется более эффективно.
Если задан только m и это скаляр, то размер результата — m-на-m. Если m, n, … — все скаляры, то размеры результата — m-на-n-на…. Если в качестве входных данных задан вектор, то размеры результата задаются элементами этого вектора.
Объект можно изменить размерность на большее число измерений, чем у него есть; в этом случае отсутствующие измерения предполагаются равными 1. Изменение размера объекта на меньшее число измерений невозможно.
-
:
y =circshift(x, n)¶ -
:
y =circshift(x, n, dim)¶ -
Циклически сдвигает значения массива x.
n должен быть вектором целых чисел, не превышающим число измерений в x. Значения n могут быть как положительными, так и отрицательными, что определяет направление сдвига значений x. Если элемент n равен нулю, то соответствующее измерение x не сдвигается. Если n — скаляр и не указан dim, то сдвиг применяется к первому не единичному измерению.
Если задан скаляр dim, то операция выполняется по указанному измерению. В этом случае n также должен быть скаляром.
Примеры:
x = [1, 2, 3; 4, 5, 6; 7, 8, 9]; ## positive shift on rows (1st non-singular dim) circshift (x, 1) ⇒ 7 8 9 1 2 3 4 5 6 ## negative shift on rows (1st non-singular dim) circshift (x, -2) ⇒ 7 8 9 1 2 3 4 5 6 ## no shift of rows, shift columns by 1 (2nd dimension) circshift (x, [0,1]) ⇒ 3 1 2 6 4 5 9 7 8 ## shift columns (2nd dimension) circshift (x, 1, 2) ⇒ 3 1 2 6 4 5 9 7 8
-
:
y =shiftdim(x, n)¶ -
:
[y, ns] =shiftdim(x)¶ -
Сдвигает измерения x на n, где n — целое число.
Если n положительное, измерения x сдвигаются влево, и ведущие измерения перемещаются в конец. Если n отрицательное, то измерения x сдвигаются вправо, и добавляются n ведущих единичных измерений.
Вызов с одним аргументом,
shiftdim, удаляет ведущие единичные измерения, возвращая число удаленных измерений во втором выходном аргументе ns.Например:
x = ones (1, 2, 3); size (shiftdim (x, -1)) ⇒ 1 1 2 3 size (shiftdim (x, 1)) ⇒ 2 3 [b, ns] = shiftdim (x) ⇒ b = 1 1 1 1 1 1 ⇒ ns = 1
-
:
[s, i] =sort(x)¶ -
:
[s, i] =sort(x, dim)¶ -
:
[s, i] =sort(x, mode)¶ -
:
[s, i] =sort(x, dim, mode)¶ -
Возвращает копию x с элементами, упорядоченными по возрастанию.
Для матриц,
sortупорядочивает элементы в рамках столбцов.Например:
sort ([1, 2; 2, 3; 3, 1]) ⇒ 1 1 2 2 3 3Если задан необязательный аргумент dim, то матрица сортируется по измерению, заданному dim. Необязательный аргумент mode определяет порядок сортировки. Допустимые значения mode —
"ascend"или"descend".Функция
sortтакже может быть использована для создания матрицы, содержащей исходные индексы строк элементов в отсортированной матрице. Например:[s, i] = sort ([1, 2; 2, 3; 3, 1]) ⇒ s = 1 1 2 2 3 3 ⇒ i = 1 3 2 1 3 2Для одинаковых элементов индексы такие, что одинаковые элементы перечислены в том порядке, в котором они появились в исходном списке.
Сортировка комплексных элементов выполняется сначала по величине (
abs (z)) и, при равенстве, по углу фазы (angle (z)). Например:sort ([1+i; 1; 1-i]) ⇒ 1 + 0i 1 - 1i 1 + 1iЗначения NaN обрабатываются как большие, чем любое другое значение, и сортируются в конце списка.
Функция
sortтакже может использоваться для сортировки строк и ячеек строк, в этом случае используется лексикографический порядок (заглавные ’A’ предшествуют строчным ’a’) строк.Алгоритм, используемый в
sortоптимизирован для сортировки частично упорядоченных списков.
-
:
[s, i] =sortrows(A)¶ -
:
[s, i] =sortrows(A, c)¶ -
Сортирует строки матрицы A в соответствии с порядком столбцов, указанных в c.
По умолчанию (c опущен или определённый столбец не указан в c) используется порядок сортировки по возрастанию. Однако, если элементы c отрицательные, то соответствующий столбец сортируется по убыванию. Если элементы A — строки, используется лексикографическая сортировка.
Пример: сортировка по столбцу 2 по убыванию, затем по столбцу 3 по возрастанию
x = [ 7, 1, 4; 8, 3, 5; 9, 3, 6 ]; sortrows (x, [-2, 3]) ⇒ 8 3 5 9 3 6 7 1 4См. также: sort.
-
:
tf =issorted(A)¶ -
:
tf =issorted(A, mode)¶ -
:
tf =issorted(A, "rows", mode)¶ -
Возвращает true, если вектор A отсортирован в соответствии с mode, который может быть либо
"ascend", либо"descend", либо"either".По умолчанию, mode равен
"ascend". Значения NaN обрабатываются так же, как иsort.Если задан необязательный аргумент
"rows", проверяется, отсортирована ли матрица по строкам, как выведено функциейsortrows(без опций).Эта функция не поддерживает разреженные матрицы.
-
:
nel =nth_element(x, n)¶ -
:
nel =nth_element(x, n, dim)¶ -
Выбирает n-й по величине элемент вектора, используя порядок, определённый
sort.Результат эквивалентен
sort(x)(n).n также может быть непрерывным диапазоном, либо возрастающим
l:u, либо убывающимu:-1:l, в этом случае возвращается диапазон элементов.Если x является массивом,
nth_elementработает вдоль измерения, определённого dim, или первого измерения с неединичным размером, если dim не указан.Примечание по программированию: nth_element оборачивает стандартные алгоритмы C++ nth_element и partial_sort. В среднем, сложность операции составляет O(M*log(K)), где
M = size (x, dim)иK = length (n). Эта функция предназначена для случаев, когда отношение K/M мало; в противном случае может быть лучше использоватьsort.
-
:
A_LO =tril(A)¶ -
:
A_LO =tril(A, k)¶ -
:
A_LO =tril(A, k, pack)¶ -
Возвращает новую матрицу, образованную извлечения нижней треугольной части матрицы A, и присвоением нулей всем другим элементам.
Необязательный второй аргумент указывает, сколько диагоналей выше или ниже главной диагонали также следует установить в ноль. Значение по умолчанию для k равно нулю, что включает главную диагональ в результат. Если значение k является ненулевым целым числом, выбор элементов начинается со смещения в k диагоналей выше главной диагонали для положительного k или ниже главной диагонали для отрицательного k. Абсолютное значение k не может быть больше числа поддиагоналей или наддиагоналей.
Пример 1: исключение главной диагонали
tril (ones (3), -1) ⇒ 0 0 0 1 0 0 1 1 0Пример 2: включение первой наддиагонали
tril (ones (3), 1) ⇒ 1 1 0 1 1 1 1 1 1Если задан необязательный третий аргумент
"pack", то извлеченные элементы не вставляются в матрицу, а вместо этого укладываются столбцами один над другим и возвращаются как вектор-столбец.
-
:
A_UP =triu(A)¶ -
:
A_UP =triu(A, k)¶ -
:
A_UP =triu(A, k, pack)¶ -
Возвращает новую матрицу, образованную извлечения верхней треугольной части матрицы A, и присвоением нулей всем другим элементам.
Необязательный второй аргумент указывает, сколько диагоналей выше или ниже главной диагонали также следует установить в ноль. Значение по умолчанию для k равно нулю, что включает главную диагональ в результат. Если значение k является ненулевым целым числом, выбор элементов начинается со смещения в k диагоналей выше главной диагонали для положительного k или ниже главной диагонали для отрицательного k. Абсолютное значение k не может быть больше числа поддиагоналей или наддиагоналей.
Пример 1: исключение главной диагонали
triu (ones (3), 1) ⇒ 0 1 1 0 0 1 0 0 0Пример 2: включение первой поддиагонали
triu (ones (3), -1) ⇒ 1 1 1 1 1 1 0 1 1Если задан необязательный третий аргумент
"pack", то извлеченные элементы не вставляются в матрицу, а вместо этого укладываются столбцами один над другим и возвращаются как вектор-столбец.
-
:
v =vec(x)¶ -
:
v =vec(x, dim)¶ -
Возвращает вектор, полученный путём укладки столбцов матрицы x один над другим.
Без dim это эквивалентно
x(:).Если dim указан, размерности v устанавливаются в dim со всеми элементами по последнему измерению. Это эквивалентно
shiftdim (x(:), 1-dim).
-
:
v =vech(x)¶ -
Возвращает вектор, полученный путём исключения всех элементов наддиагонали квадратной матрицы x и укладки результата один столбец над другим.
Это используется в матричном исчислении, где подлежащая матрица симметрична, и бессмысленно сохранять значения выше главной диагонали.
См. также: vec.
-
:
B =prepad(A, l)¶ -
:
B =prepad(A, l, c)¶ -
:
B =prepad(A, l, c, dim)¶ -
Добавляет скалярное значение c в начало вектора A до тех пор, пока его длина не станет равной l. Если c не задан, используется значение 0.
Если
length (A) > l, элементы с начала A удаляются до тех пор, пока не будет получен вектор длины l.Если A является матрицей, элементы добавляются в начало или удаляются из каждой строки.
Если задан необязательный аргумент dim, операция выполняется вдоль этого измерения.
Если dim больше размерностей A, результат будет иметь dim измерений.
-
:
B =postpad(A, l)¶ -
:
B =postpad(A, l, c)¶ -
:
B =postpad(A, l, c, dim)¶ -
Добавить скалярное значение c к вектору A до тех пор, пока его длина не станет равной l. Если c не указано, используется значение 0.
Если
length (A) > l, элементы с конца A удаляются до тех пор, пока длина вектора не станет равной l.Если A является матрицей, элементы добавляются или удаляются из каждой строки.
Если указан необязательный аргумент dim, выполните операцию вдоль этого измерения.
Если dim больше размеров A, результат будет иметь dim измерений.
-
:
M =diag(v)¶ -
:
M =diag(v, k)¶ -
:
M =diag(v, m, n)¶ -
:
v =diag(M)¶ -
:
v =diag(M, k)¶ -
Возвращает диагональную матрицу с вектором v на диагонали k.
Второй аргумент необязателен. Если он положителен, вектор размещается на k-й наддиагонали. Если он отрицателен, он размещается на -k-й поддиагонали. По умолчанию k равен 0, и вектор размещается на главной диагонали. Например:
diag ([1, 2, 3], 1) ⇒ 0 1 0 0 0 0 2 0 0 0 0 3 0 0 0 0Трехэлементная форма возвращает диагональную матрицу с вектором v на главной диагонали, и результирующая матрица имеет размер m строк x n столбцов.
Если в качестве аргумента передается матрица, а не вектор,
diagизвлекает k-ю диагональ матрицы.
© 1996–2023 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/v9.2.0/Rearranging-Matrices.html