27 Множества
Octave имеет ряд функций для управления наборами данных. Множество определяется как совокупность уникальных элементов и обычно представляется вектором чисел, отсортированных в порядке возрастания. Любой вектор или матрицу можно преобразовать в множество, удалив дубликаты с помощью функции unique. Однако нет необходимости явно создавать множество, так как все функции, которые работают с множествами, преобразуют свой вход в множество перед продолжением.
- : y = unique (x) ¶
- : y = unique (x, "rows") ¶
- : y = unique (…, "sorted") ¶
- : y = unique (…, "stable") ¶
- : [y, i, j] = unique (…) ¶
- : [y, i, j] = unique (…, "first") ¶
- : [y, i, j] = unique (…, "last") ¶
- : [y, i, j] = unique (…, "legacy") ¶
-
Возвращает уникальные элементы x.
Если входной x является столбцом, то возвращается столбец; в противном случае возвращается строка. x также может быть ячейным массивом строк.
Если задан необязательный аргумент
"rows", то возвращает уникальные строки x. Вход должен быть двумерной числовой матрицей, чтобы использовать этот вариант.Необязательные аргументы
"sorted"/"stable"управляют порядком, в котором уникальные значения появляются в выводе. По умолчанию"sorted", и значения в выводе упорядочиваются по возрастанию. Альтернатива"stable"сохраняет порядок, найденный во входном x.Если запрошено, возвращает векторы индексов столбцов i и j такие, что
y = x(i)иx = y(j).Кроме того, если i является запрошенным выводом, то может быть задано одно из флагов
"first"или"last". Если"last"указано, возвращаются наибольшие возможные индексы в i, в противном случае, если"first"указано, возвращаются наименьшие. По умолчанию"first".Пример 1: порядок сортировки
unique ([3, 1, 1, 2]) ⇒ [1, 2, 3] unique ([3, 1, 1, 2], "stable") ⇒ [3, 1, 2]
Пример 2: выбор индекса
[~, i] = unique ([3, 1, 1, 2], "first") ⇒ i = [2; 4; 1] [~, i] = unique ([3, 1, 1, 2], "last") ⇒ i = [3; 4; 1]
Примечания по программированию: входной флаг
"legacy"изменяет алгоритм для совместимости с версиями MATLAB до R2012b. В частности, флаг упорядочения индексов изменяется на"last", а форма выходов i, j будет следовать форме входного x, а не всегда быть векторами-столбцами.Третий вывод j еще не реализован, когда порядок сортировки
"stable".
- : c = uniquetol (A) ¶
- : c = uniquetol (A, tol) ¶
- : c = uniquetol (…, property, value) ¶
- : [c, ia, ic] = uniquetol (…) ¶
-
Возвращает уникальные элементы A с точностью tol.
Два значения x и y находятся в пределах относительной погрешности, если
abs (x - y) <= tol * max (abs (A(:))).Вход A должен быть вещественного (не комплексного) типа с плавающей запятой (double или single).
Если tol не указан, то по умолчанию точность составляет 1e-12 для входных данных двойной точности или 1e-6 для входных данных одинарной точности.
Функция также может быть вызвана с помощью следующих необязательных пар свойство/значение. Параметры свойство/значение должны передаваться после других входных аргументов:
"ByRows"(по умолчанию:false)-
Когда значение true, возвращает уникальные строки A. A должен быть двумерным массивом, чтобы использовать этот параметр. Для строк критерии уникальности изменяются на
all (abs (x - y) <= tol*max (abs (A),[],1)), который сравнивает каждый компонент столбца строки с точностью столбца. "DataScale"-
Тест на точность изменяется на
abs (x - y) <= tol*DS, где DS является скаляром, если свойство"ByRows"не true. В этом случае DS может быть скаляром или вектором с длиной, равной числу столбцов в A. Использование значения1.0для DS изменит точность с относительной на абсолютную. Использование значенияInfотключит проверку. "OutputAllIndices"(по умолчанию:false)Если значение true, ia является ячейным массивом (а не вектором), который содержит индексы всех элементов в A, которые находятся в пределах погрешности значения в C. То есть, каждая ячейка в ia соответствует одному уникальному значению в C, а значения в каждой ячейке соответствуют местоположениям в A.
Вывод c является строкой, если вход A является строкой. Во всех других случаях возвращается вектор-столбец.
Необязательный вывод ia является вектором индексов столбцов, таким что
c = A(ia). Если свойство"ByRows"true, условиеc = A(ia, :). Если свойство"OutputAllIndices"true, то значенияA(ia{i})находятся в пределах погрешности уникального значенияc(i).Необязательный вывод ic является вектором индексов столбцов, таким что
A = c(ic)когда A является вектором. Когда A является матрицей,A(:) = c(ic). Если свойство"ByRows"true, тоA = c(ic,:).Пример: малые ошибки округления требуют
uniquetol, а неuniquex = [1:5]; ## Inverse_Function (Function (x)) should return exactly x y = exp (log (x)); D = unique ([x, y]) ⇒ [1 2 3 3 4 5 5] C = uniquetol ([x, y]) ⇒ [1 2 3 4 5]
См. также: unique, union, intersect, setdiff, setxor, ismember.
© 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/Sets.html