16.1 Поиск элементов и проверка условий
Функции any и all полезны для определения, удовлетворяют ли некоторые или все элементы матрицы некоторому условию. Функция find также полезна для определения, какие элементы матрицы удовлетворяют заданному условию.
- : any (x)
- : any (x, dim)
-
Для векториального аргумента возвращает true (логическое 1), если любой элемент вектора отличен от нуля.
Для матричного аргумента возвращает строку логических 1 и 0, где каждый элемент указывает, является ли какой-либо элемент соответствующего столбца матрицы отличным от нуля. Например:
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), если все элементы вектора отличны от нуля.
Для матричного аргумента возвращает строку логических 1 и 0, где каждый элемент указывает, являются ли все элементы соответствующего столбца матрицы отличными от нуля. Например:
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возвращает ложь.Таблица истинности для операции xor:
x y z - - - 0 0 0 1 0 1 0 1 1 1 1 0 Если задано более двух аргументов, операция xor применяется кумулятивно слева направо:
(…((x1 XOR x2) XOR x3) XOR …)
- : 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), возвращается пустая матрица.
- : isinf (x)
-
Возвращает логический массив, который истинен, где элементы x бесконечны, и ложен, где они не бесконечны.
Например:
isinf ([13, Inf, NA, NaN]) ⇒ [ 0, 1, 0, 0 ]
- : isnan (x)
-
Возвращает логический массив, который истинен, где элементы x — значения NaN, и ложен, где они не являются таковыми.
Значения NA также считаются значениями NaN. Например:
isnan ([13, Inf, NA, NaN]) ⇒ [ 0, 0, 1, 1 ]
- : isfinite (x)
-
Возвращает логический массив, который истинен, где элементы x — конечные значения, и ложен, где они не являются таковыми.
Например:
isfinite ([13, Inf, NA, NaN]) ⇒ [ 1, 0, 0, 0 ]
- : [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/v6.4.0/Finding-Elements-and-Checking-Conditions.html