Spec-Zone.ru › Octave 8

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

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

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

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

Возвращает побитовое исключающее ИЛИ от 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 не монотонна или если 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/v8.1.0/Finding-Elements-and-Checking-Conditions.html

Spec-Zone.ru

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