Scilab Home page | Wiki | Bug tracker | Forge | Mailing list archives | ATOMS | File exchange
Please login or create an account
Change language to: English - Français - Português - 日本語 -
Справка Scilab >> Основные функции > Манипуляции с матрицами > flipdim

flipdim

меняем порядок (частей) строк, столбцов, страниц... массива

Синтаксис

y = flipdim(x, dim)
y = flipdim(x, dim, blockSize)

Аргументы

x, y

векторы, матрицы или гиперматрицы любого обычного типа данных или cell-массива. y получает размеры x.

dim

положительное целое: индексы размерности/направления x, вдоль которой порядок элементов x должен быть изменён.

blockSize

положительное целое, общий делитель size(x,dim): число строк, столбцов страниц и т.д. в каждом блоке. Значение по умолчанию 1.

Описание

flipdim(x, 1) изменяет порядок строк в x.

flipdim(x, 2) изменяет порядок столбцов в x.

flipdim(x, 3) изменяет порядок страниц в x. И т.д.

Необязательный параметр blockSize позволяет разделить x на size(x,1)/blockSize блоков из blockSize строк (dim=1), или в size(x,2)/blockSize блоков из blockSize столбцов (dim=2) и т.д. (dim>2) и меняет их порядок. В каждом блоке меняется порядок элементов (строк, столбцов, страниц и т.д.).

Примеры

// Пример 1: переключает строки x (= элементы вдоль первой размерности)
x = [1 2 3 4; 5 6 7 8]
y = flipdim(x, 1)

// Пример 2: переключает столбцы (= элементы вдоль второй размерности)
y = flipdim(x, 2)

// Пример 3: переключает страницы (= элементы вдоль третьей размерности)
x = matrix(1:24, [3 2 4])
y = flipdim(x, 3)

// Пример 4: первый пример с комплексными числами
x = [1+%i 2*%i 3 4; 5 6-%i 7 8*%pi*%i]
y = flipdim(x, 1)

// Кодированные целые числа:
x = int16(grand(4, 3, 2, "uin", -9, 9))
y = flipdim(x, 1)

// Логические значения:
x = (grand(3, 4, "uin", -9, 9) > 0)
y = flipdim(x, 2)

// Тексты:
x = matrix(strsplit("a":"x", 1:23), 4, 6);
x = x+x
flipdim(x, 2)

// Полиномы:
x = inv_coeff(grand(3, 9, "uin", 0, 3), 2)
flipdim(x, 1)

// Дробно-рациональные:
n = inv_coeff(grand(3, 9, "uin", 0, 3), 2);
d = inv_coeff(grand(3, 9, "uin", 0, 3), 2);
r = n./d
flipdim(r, 2)

Примеры, использующие blockSize :

X = [0 1 2 3 4 5 6 7 8 9 10 11];
flipdim(X, 2, 2) // => [10 11   8 9   6 7   4 5   2 3   0 1] // Размер блока = 2.
flipdim(X, 2, 3) // => [9 10 11   6 7 8   3 4 5   0 1 2]
flipdim(X, 2, 4) // => [8 9 10 11   4 5 6 7   0 1 2 3]
flipdim(X, 2, 6) // => [6 7 8 9 10 11   0 1 2 3 4 5]

// Ошибка, если blockSize не делится на результирующую размерность x.
y = flipdim(x, 2, 5); // size(X) = [1 12] и blockSize=5 не делится на 12.

Примеры результатов:

--> x
 x  =
 -5 -2  0  9
  0 -7 -6  9
 -1 -8 -7  8

--> flipdim(x, 1)
 ans  =
 -1 -8 -7  8
  0 -7 -6  9
 -5 -2  0  9

--> flipdim(x, 2)
 ans  =
  9  0 -2 -5
  9 -6 -7  0
  8 -7 -8 -1

--> x
 x  =
(:,:,1)
  9  4 -3
 -4 -8 -3

(:,:,2)
  5  8  9
  4  4  9

--> flipdim(x, 3)
 ans  =
(:,:,1)
  5  8  9
  4  4  9

(:,:,2)
  9  4 -3
 -4 -8 -3

--> x
 x  =
 -2  3 -5  9 -4 -8
  2  8  4 -9  6 -6
 -9  8  3  4 -3  4

--> flipdim(x, 2, 2)
 ans  =
 -4 -8 -5  9 -2  3
  6 -6  4 -9  2  8
 -3  4  3  4 -9  8

--> flipdim(x, 2, 3)
 ans  =
  9 -4 -8 -2  3 -5
 -9  6 -6  2  8  4
  4 -3  4 -9  8  3

Смотрите также

  • circshift — смещает по кругу элементы матрицы
  • fftshift — перегруппировывает результат БПФ, сдвигая нулевую частоту в центр спектра
  • ifftshift — inverse of fftshift
  • двоеточие — оператор "двоеточие"

История

VersionDescription
5.5.0
  • Расширение на все обычные типы данных: логические, целые числа, строковые, полиномы, дробно-рациональны, графические указатели и т.д.
  • Новый входной аргумент blockSize для поблокового переключения x.
Scilab Enterprises
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Tue Feb 25 08:54:54 CET 2020