Spec-Zone.ru › Octave 9

Далее: Переупорядочивание матриц, Вверх: Манипуляции с матрицами [Оглавление][Индекс]

16.1 Поиск элементов и проверка условий ¶

Функции any и all полезны для определения, удовлетворяют ли все или некоторые элементы матрицы определенному условию. Функция find также полезна для определения элементов матрицы, которые соответствуют заданному условию.

: tf = any (x) ¶
: tf = any (x, dim) ¶

Для векторного аргумента возвращает true (логическое 1), если какой-либо элемент вектора отличен от нуля.

Для матричного аргумента возвращает строковый вектор логических единиц и нулей, где каждый элемент указывает, является ли какой-либо элемент соответствующего столбца матрицы отличным от нуля. Например:

any (eye (2, 4))
 ⇒ [ 1, 1, 0, 0 ]

Если необязательный аргумент dim задан, работа выполняется вдоль размерности dim. Например:

any (eye (2, 4), 2)
 ⇒ [ 1; 1 ]

См. также: all.

: tf = all (x) ¶
: tf = all (x, dim) ¶

Для векторного аргумента возвращает true (логическое 1), если все элементы вектора отличны от нуля.

Для матричного аргумента возвращает строковый вектор логических единиц и нулей, где каждый элемент указывает, являются ли все элементы соответствующего столбца матрицы отличными от нуля. Например:

all ([2, 3; 1, 0])
    ⇒ [ 1, 0 ]

Если необязательный аргумент dim задан, работа выполняется вдоль размерности dim.

См. также: any.

Поскольку операторы сравнения (см. Операторы сравнения) возвращают матрицы единиц и нулей, легко проверить матрицу на множество вещей, а не только на то, являются ли элементы отличными от нуля. Например,

all (all (rand (5) < 0.9))
     ⇒ 0

проверяет случайную матрицу 5x5, чтобы увидеть, меньше ли все её элементы, чем 0,9.

Обратите внимание, что в контекстах условных операторов (например, в части условия операторов if и while) Octave обрабатывает проверку так, как если бы вы набрали all (all (condition)).

: z = xor (x, y) ¶
: z = xor (x1, x2, …) ¶

Возвращает результат операции «исключающее или» (exclusive or) для x и y.

Для логических выражений x и y, xor (x, y) истинно тогда и только тогда, когда одно из x или y истинно. В противном случае, если x и y оба истинны или оба ложны, xor возвращает false.

Таблица истинности для операции xor

x y z
- - -
0 0 0
1 0 1
0 1 1
1 1 0

Если предоставлено более двух аргументов, операция xor применяется кумулятивно слева направо:

(...((x1 XOR x2) XOR x3) XOR ...)

См. также: and, or, not.

: y = diff (x) ¶
: y = diff (x, k) ¶
: y = diff (x, k, dim) ¶

Если x — вектор длиной n, diff (x) — вектор первых разностей x(2) - x(1), …, x(n) - x(n-1).

Если x — матрица, diff (x) — матрица разностей столбцов по первой неединичной размерности.

Второй аргумент необязателен. Если он задан, diff (x, k), где k — неотрицательное целое число, возвращает k-ые разности. Возможно, что k больше первой неединичной размерности матрицы. В этом случае diff продолжает вычислять разности по следующей неединичной размерности.

Размерность, по которой вычисляются разности, может быть явно указана с помощью необязательной переменной dim. В этом случае k-ые разности вычисляются по этой размерности. В случае, если k превышает size (x, dim), возвращается пустая матрица.

См. также: sort, merge.

: tf = isinf (x) ¶

Возвращает логический массив, который истинен, где элементы x — бесконечны, и ложен, где они не бесконечны.

Например:

isinf ([13, Inf, NA, NaN])
      ⇒ [ 0, 1, 0, 0 ]

См. также: isfinite, isnan, isna.

: tf = isnan (x) ¶

Возвращает логический массив, который истинен, где элементы x — NaN-значения, и ложен, где они не NaN-значения.

Значения NA также считаются NaN-значениями. Например:

isnan ([13, Inf, NA, NaN])
      ⇒ [ 0, 0, 1, 1 ]

См. также: isna, isinf, isfinite.

: tf = isfinite (x) ¶

Возвращает логический массив, который истинен, где элементы x — конечные значения, и ложен, где они не конечные.

Например:

isfinite ([13, Inf, NA, NaN])
     ⇒ [ 1, 0, 0, 0 ]

См. также: isinf, isnan, isna.

: [err, yi, …] = common_size (xi, …) ¶

Определяет, являются ли все входные аргументы скалярами или имеют общую размерность.

Если это верно, err равен нулю, а yi — матрица общей размерности со всеми элементами, равными xi, если это скаляр, или xi в противном случае. Если входные данные не могут быть приведены к общей размерности, err равен 1, а yi — xi. Например:

[err, a, b] = common_size ([1 2; 3 4], 5)
     ⇒ err = 0
     ⇒ a = [ 1, 2; 3, 4 ]
     ⇒ b = [ 5, 5; 5, 5 ]

Это полезно для реализации функций, где аргументы могут быть либо скалярами, либо иметь общую размерность.

См. также: size, size_equal, numel, ndims.

: idx = find (x) ¶
: idx = find (x, n) ¶
: idx = find (x, n, direction) ¶
: [i, j] = find (…) ¶
: [i, j, v] = find (…) ¶

Возвращает вектор индексов ненулевых элементов матрицы, как строку, если x — строчный вектор, или как столбец в противном случае.

Для получения одного индекса для каждого элемента матрицы Octave предполагает, что столбцы матрицы образуют один длинный вектор (как хранятся массивы Fortran). Например:

find (eye (2))
  ⇒ [ 1; 4 ]

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

Если заданы три входных значения, direction должно быть одним из "first" или "last", запрашивая только первые или последние n индексы соответственно. Однако индексы всегда возвращаются в возрастающем порядке.

Если запрашиваются два выходных значения, find возвращает строчные и столбцовые индексы ненулевых элементов матрицы. Например:

[i, j] = find (2 * eye (2))
    ⇒ i = [ 1; 2 ]
    ⇒ j = [ 1; 2 ]

Если запрашиваются три выходных значения, find также возвращает вектор, содержащий ненулевые значения. Например:

[i, j, v] = find (3 * eye (2))
       ⇒ i = [ 1; 2 ]
       ⇒ j = [ 1; 2 ]
       ⇒ v = [ 3; 3 ]

Если x — многомерный массив размером m x n x p x …, j содержит расположения столбцов, как если бы x был сжат в двумерную матрицу размером m x (n + p + …).

Обратите внимание, что эта функция особенно полезна для разреженных матриц, так как она извлекает ненулевые элементы как векторы, которые затем могут быть использованы для создания исходной матрицы. Например:

sz = size (a);
[i, j, v] = find (a);
b = sparse (i, j, v, sz(1), sz(2));

См. также: nonzeros.

: idx = lookup (table, y) ¶
: idx = lookup (table, y, opt) ¶

Поиск значений в отсортированной таблице.

Эта функция обычно используется в качестве прелюдии к интерполяции.

Если таблица возрастающая, длиной N и idx = lookup (table, y), то table(idx(i)) <= y(i) < table(idx(i+1)) для всех y(i) в пределах таблицы. Если y(i) < table(1) то idx(i) равно 0. Если y(i) >= table(end) или isnan (y(i)) то idx(i) равно N.

Если таблица убывающая, то тесты меняются на обратные. Для нестрого монотонных таблиц пустые интервалы всегда пропускаются. Результат не определен, если table не монотонна или содержит NaN.

Сложность поиска — O(M*log(N)), где M — размер y. В частном случае, когда y также отсортирована, сложность составляет O(min (M*log(N), M+N)).

table и y также могут быть массивами ячеек строк (или y может быть одной строкой). В этом случае поиск строк выполняется с использованием лексикографического сравнения.

Если указан opts, он должен быть строкой с буквами, указывающими дополнительные параметры.

m

Совпадение. table(idx(i)) == y(i) если y(i) встречается в таблице; в противном случае, idx(i) равно нулю.

b

Булево. idx(i) — логическое 1 или 0, указывающее, содержится ли y(i) в таблице или нет.

l

Левая граница. Для числовых поисков самый левый подинтервал будет расширен до минус бесконечности (т.е., все индексы не меньше 1).

r

Правая граница. Для числовых поисков самый правый подинтервал будет расширен до бесконечности (т.е., все индексы не больше N-1).

Примечание: Если table не отсортирована, результаты от lookup будут непредсказуемыми.

Если вы хотите проверить, существует ли переменная вообще, а не свойства ее элементов, обратитесь к Статусу переменных.

Далее: Перестановка матриц, Назад: Манипуляции с матрицами [Оглавление][Индекс]

© 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/Finding-Elements-and-Checking-Conditions.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API