27.1 Операции над множествами
Octave поддерживает несколько базовых операций над множествами. Octave может вычислять объединение, пересечение и разность двух множеств. Octave также поддерживает операцию над множествами исключающее ИЛИ.
Все функции для операций над множествами работают одинаково: принимают два входных множества и возвращают третье множество. Например, предположим, что a и b содержат два множества, тогда
union (a, b)
вычисляет объединение двух множеств.
Наконец, определить, принадлежат ли элементы множеству, можно с помощью функции ismember. Поскольку множества упорядочены, эта операция очень эффективна и имеет сложность O(log2(n)), что предпочтительнее функции find со сложностью O(n).
-
:
c =intersect(a, b) -
:
c =intersect(a, b, "rows") -
:
c =intersect(…, "sorted") -
:
c =intersect(…, "stable") -
:
c =intersect(…, "legacy") -
:
[c, ia, ib] =intersect(…) -
Возвращает уникальные элементы, общие для a и b.
Если a и b — векторы-строки, возвращается вектор-строка; в противном случае возвращается вектор-столбец. Входными данными также могут быть массивы ячеек со строками.
Если задан необязательный входной аргумент
"rows", возвращаются общие строки a и b. Для использования этого параметра входные данные должны быть двумерными числовыми матрицами.Необязательный аргумент
"sorted"/"stable"задаёт порядок появления уникальных значений в выходных данных. По умолчанию используется"sorted", и значения в выходных данных располагаются в порядке возрастания. Альтернативный вариант"stable"сохраняет порядок, заданный во входных данных.Если запрошено, возвращаются векторы-столбцы индексов ia и ib, такие что
c = a(ia)иc = b(ib).Примечание по программированию: входной флаг
"legacy"изменяет алгоритм для совместимости с выпусками MATLAB до R2012b.
-
:
c =union(a, b) -
:
c =union(a, b, "rows") -
:
c =union(…, "sorted") -
:
c =union(…, "stable") -
:
c =union(…, "legacy") -
:
[c, ia, ib] =union(…) -
Возвращает уникальные элементы, принадлежащие либо a, либо b.
Если a и b — векторы-строки, возвращается вектор-строка; в противном случае возвращается вектор-столбец. Входными данными также могут быть массивы ячеек со строками.
Если задан необязательный входной аргумент
"rows", возвращаются строки, принадлежащие либо a, либо b. Для использования этого параметра входные данные должны быть двумерными числовыми матрицами.Необязательный аргумент
"sorted"/"stable"задаёт порядок появления уникальных значений в выходных данных. По умолчанию используется"sorted", и значения в выходных данных располагаются в порядке возрастания. Альтернативный вариант"stable"сохраняет порядок, заданный во входных данных.Необязательные выходные аргументы ia и ib — это векторы-столбцы индексов, такие что
a(ia)иb(ib)являются непересекающимися множествами, объединение которых равно c.Примечание по программированию: входной флаг
"legacy"изменяет алгоритм для совместимости с выпусками MATLAB до R2012b.
-
:
c =setdiff(a, b) -
:
c =setdiff(a, b, "rows") -
:
c =setdiff(…, "sorted") -
:
c =setdiff(…, "stable") -
:
c =setdiff(…, "legacy") -
:
[c, ia] =setdiff(…) -
Возвращает уникальные элементы, которые есть в a, но отсутствуют в b.
Если a — вектор-строка, возвращается вектор-строка; в противном случае возвращается вектор-столбец. Входными данными также могут быть массивы ячеек со строками.
Если задан необязательный входной аргумент
"rows", возвращаются строки из a, отсутствующие в b. Для использования этого параметра входные данные должны быть двумерными числовыми матрицами.Необязательный аргумент
"sorted"/"stable"задаёт порядок появления уникальных значений в выходных данных. По умолчанию используется"sorted", и значения в выходных данных располагаются в порядке возрастания. Альтернативный вариант"stable"сохраняет порядок, заданный во входных данных.Если запрошено, возвращается вектор индексов ia, такой что
c = a(ia).Примечание по программированию: входной флаг
"legacy"изменяет алгоритм для совместимости с выпусками MATLAB до R2012b.
-
:
c =setxor(a, b) -
:
c =setxor(a, b, "rows") -
:
c =setxor(…, "sorted") -
:
c =setxor(…, "stable") -
:
c =setxor(…, "legacy") -
:
[c, ia, ib] =setxor(…) -
Возвращает уникальные элементы, принадлежащие только одному из множеств a и b.
Если a и b — векторы-строки, возвращается вектор-строка; в противном случае возвращается вектор-столбец. Входными данными также могут быть массивы ячеек со строками.
Если задан необязательный входной аргумент
"rows", возвращаются строки, принадлежащие только одному из множеств a и b. Для использования этого параметра входные данные должны быть двумерными числовыми матрицами.Необязательный аргумент
"sorted"/"stable"задаёт порядок появления уникальных значений в выходных данных. По умолчанию используется"sorted", и значения в выходных данных располагаются в порядке возрастания. Альтернативный вариант"stable"сохраняет порядок, заданный во входных данных.Необязательные выходные аргументы ia и ib — это векторы-столбцы индексов, такие что
a(ia)иb(ib)являются непересекающимися множествами, объединение которых равно c.Примечание по программированию: входной флаг
"legacy"изменяет алгоритм для совместимости с выпусками MATLAB до R2012b.
-
:
tf =ismember(a, s) -
:
tf =ismember(a, s, "rows") -
:
[tf, s_idx] =ismember(…) -
Возвращает логическую матрицу tf той же формы, что и a: значение истинно (1), если элемент из a найден в s, и ложно (0) в противном случае.
Если запрошен второй выходной аргумент, также возвращается индекс каждого совпавшего элемента в s.
a = [3, 10, 1]; s = [0:9]; [tf, s_idx] = ismember (a, s) ⇒ tf = [1, 0, 1] ⇒ s_idx = [4, 0, 2]Входные данные a и s также могут быть массивами ячеек.
a = {"abc"}; s = {"abc", "def"}; [tf, s_idx] = ismember (a, s) ⇒ tf = 1 ⇒ s_idx = 1Если задан необязательный третий аргумент
"rows", сравниваются строки в a со строками в s. Для использования этого параметра входные данные должны быть двумерными матрицами с одинаковым числом столбцов.a = [1:3; 5:7; 4:6]; s = [0:2; 1:3; 2:4; 3:5; 4:6]; [tf, s_idx] = ismember (a, s, "rows") ⇒ tf = logical ([1; 0; 1]) ⇒ s_idx = [2; 0; 5];См. также: lookup, unique, union, intersect, setdiff, setxor, ismembertol.
-
:
tf =ismembertol(a, s) -
:
tf =ismembertol(a, s, tol) -
:
tf =ismembertol(a, s, name, value) -
:
[tf, s_idx] =ismembertol(…) -
Проверяет, принадлежат ли значения множеству с заданной погрешностью.
Эта функция возвращает логическую матрицу tf той же формы, что и a: значение истинно (1), если элемент в a близок к s в пределах допуска tol, и ложно (0) в противном случае. Если tol не задан, используется допуск по умолчанию
1e-6.Если запрошен второй выходной аргумент, также возвращается индекс каждого совпавшего элемента в s.
Входные данные a и s должны быть числовыми значениями.
a = [3, 10, 1]; s = [0:9]; [tf, s_idx] = ismembertol (a, s) ⇒ tf = [1, 0, 1] ⇒ s_idx = [4, 0, 2]Чтобы изменить поведение функции, можно задать необязательные пары свойство/значение. Свойством может быть одна из следующих строк:
"ByRows"-
Если задано значение
false(по умолчанию), все элементы в a и s обрабатываются по отдельности. Если задано значениеtrue, tf будет равноtrueдля каждой строки в a, совпадающей со строкой в s в пределах заданного допуска. Две строки, u и v, находятся в пределах допуска, если выполняется условиеall (abs (u-v) <= tol*max (abs ([a;s]))). "OutputAllIndices"-
Если задано значение
false(по умолчанию), s_idx содержит индексы одного из совпадений. Если задано значениеtrue, s_idx — это массив ячеек, содержащий индексы всех элементов в s, находящихся в пределах допуска от соответствующего значения в a. "DataScale"Указанное значение DS используется для изменения масштабного коэффициента в проверке допуска на
abs (u-v) <= tol*DS. По умолчанию в качестве масштабного коэффициента используется максимальное абсолютное значение в a и s.
Пример:
s = [1:6].' * pi; a = 10.^log10 (x); [tf, s_idx] = ismembertol (a, s);
См. также: ismember, lookup, unique, union, intersect, setdiff, setxor.
-
:
p =powerset(a) -
:
p =powerset(a, "rows") -
Вычисляет множество всех подмножеств множества a.
Множество a должно быть числовой матрицей или массивом ячеек со строками. Выходные данные всегда представляют собой массив ячеек, содержащий векторы или строки.
При указании необязательного аргумента
"rows"каждая строка множества a считается одним элементом множества. Для использования этого аргумента входные данные должны быть двумерной числовой матрицей.См. также: unique, union, intersect, setdiff, setxor, ismember.
© 1996–2026 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.4.0/Set-Operations.html