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".См. также: uniquetol, объединение, пересечение, разность множеств, исключающее или, ismember.
-
:
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) -
Если истинно, возвращаются уникальные строки A. A должен быть двумерным массивом для использования этого варианта. Для строк критерии уникальности изменяются на
all (abs (x - y) <= tol*max (abs (A),[],1)), который сравнивает каждый компонент столбца строки со столбцовым значением допуска. "DataScale"-
Тест допуска изменяется на
abs (x - y) <= tol*DS, где DS является скаляром, если свойство"ByRows"не истинно. В этом случае DS может быть скаляром или вектором с длиной, равной количеству столбцов в A. Использование значения1.0для DS изменит допуск с относительного на абсолютный. Использование значенияInfотключит тестирование. -
"OutputAllIndices"(по умолчанию:false) Если истинно, ia — массив ячеек (а не вектор), содержащий индексы для *всех* элементов в A, которые находятся в пределах допуска к значению в C. То есть, каждая ячейка в ia соответствует одному уникальному значению в C, а значения в каждой ячейке соответствуют расположениям в A.
Вывод c является строкой, если вход A является строкой. Во всех остальных случаях возвращается столбец.
Необязательный вывод ia — вектор индексов столбцов такой, что
c = A(ia). Если свойство"ByRows"истинно, условиеc = A(ia, :). Если свойство"OutputAllIndices"истинно, то значенияA(ia{i})находятся в пределах допуска к уникальному значениюc(i).Необязательный вывод ic — вектор индексов столбцов такой, что
A = c(ic)когда A является вектором. Когда A является матрицей,A(:) = c(ic). Если свойство"ByRows"истинно, то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, объединение, пересечение, разность множеств, исключающее или, 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/v9.2.0/Sets.html