Spec-Zone.ru › Octave 5

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

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

any (x)
any (x, dim)

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

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

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

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

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

См. также: all.

all (x)
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.

diff (x)
diff (x, k)
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.

isinf (x)

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

Например:

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

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

isnan (x)

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

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

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

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

isfinite (x)

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

Например:

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 ]

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

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

Spec-Zone.ru

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