Уникальные значения в пределах допуска
возвращает уникальные элементы в C = uniquetol(A,tol)A использование допуска tol. Два значения, u и v, находятся в пределах допуска, если
abs(u-v) <= tol*max(abs(A(:)))
То есть uniquetol масштабирует tol ввод на основе величины данных.
uniquetol аналогичен unique. Принимая во внимание, что unique выполняет точные сравнения, uniquetol выполняет сравнение с использованием допуска.
[___] = uniquetol(___, использует дополнительные параметры, заданные одним или несколькими аргументами пары Имя-Значение, используя любую из комбинаций входных или выходных аргументов в предыдущих синтаксисах. Например, Name,Value)uniquetol(A,'ByRows',true) определяет уникальные строки в A.
Создание вектора x. Получение второго вектора y путем преобразования и нетрансформации x. Это преобразование вводит различия округления в y.
x = (1:6)'*pi; y = 10.^log10(x);
Убедитесь, что x и y не идентичны, принимая разницу.
x-y
ans = 6×1
10-14 ×
0.0444
0
0
0
0
-0.3553
Использовать unique поиск уникальных элементов в конкатенированном векторе [x;y]. unique функция выполняет точные сравнения и определяет, что некоторые значения в x не совсем равны значениям в y. Это те же самые элементы, которые имеют ненулевое различие в x-y. Таким образом, c содержит значения, которые являются дубликатами.
c = unique([x;y])
c = 8×1
3.1416
3.1416
6.2832
9.4248
12.5664
15.7080
18.8496
18.8496
Использовать uniquetol для выполнения сравнения с использованием небольшого допуска. uniquetol рассматривает элементы, находящиеся в пределах допуска, как равные.
C = uniquetol([x;y])
C = 6×1
3.1416
6.2832
9.4248
12.5664
15.7080
18.8496
По умолчанию uniquetol ищет уникальные элементы, которые находятся в пределах допуска, но также может найти уникальные строки матрицы, которые находятся в пределах допуска.
Создайте числовую матрицу, A. Получение второй матрицы, B, путем преобразования и нетрансформации A. Это преобразование вносит различия округления в B.
A = [0.05 0.11 0.18; 0.18 0.21 0.29; 0.34 0.36 0.41; 0.46 0.52 0.76]; B = log10(10.^A);
Использовать unique для поиска уникальных строк в A и B. unique функция выполняет точные сравнения и определяет, что все строки в конкатенированной матрице [A;B] уникальны, несмотря на то, что некоторые строки отличаются лишь на небольшую величину.
unique([A;B],'rows')ans = 8×3
0.0500 0.1100 0.1800
0.0500 0.1100 0.1800
0.1800 0.2100 0.2900
0.1800 0.2100 0.2900
0.3400 0.3600 0.4100
0.3400 0.3600 0.4100
0.4600 0.5200 0.7600
0.4600 0.5200 0.7600
Использовать uniquetol для поиска уникальных строк. uniquetol обрабатывает строки, находящиеся в пределах допуска, как равные.
uniquetol([A;B],'ByRows',true)ans = 4×3
0.0500 0.1100 0.1800
0.1800 0.2100 0.2900
0.3400 0.3600 0.4100
0.4600 0.5200 0.7600
Создайте вектор, x. Получить второй вектор, y, путем преобразования и нетрансформации x. Это преобразование вводит различия округления для некоторых элементов в y.
x = (1:5)'*pi; y = 10.^log10(x);
Объединиться x и y в один вектор, A. Использовать uniquetol восстановить A, рассматривая значения, которые находятся в пределах допуска, как равные.
A = [x;y]
A = 10×1
3.1416
6.2832
9.4248
12.5664
15.7080
3.1416
6.2832
9.4248
12.5664
15.7080
[C,IA,IC] = uniquetol(A); newA = C(IC)
newA = 10×1
3.1416
6.2832
9.4248
12.5664
15.7080
3.1416
6.2832
9.4248
12.5664
15.7080
Вы можете использовать newA с == или функции, которые используют точное равенство, как isequal или unique в последующем коде.
D1 = unique(A)
D1 = 6×1
3.1416
3.1416
6.2832
9.4248
12.5664
15.7080
D2 = unique(newA)
D2 = 5×1
3.1416
6.2832
9.4248
12.5664
15.7080
Создание облака из 2-D точек-образцов с зависимостью нахождения внутри круга радиуса 0.5 по центру в точке ).
x = rand(10000,2); insideCircle = sqrt((x(:,1)-.5).^2+(x(:,2)-.5).^2)<0.5; y = x(insideCircle,:);
Найдите уменьшенный набор точек, чтобы каждая точка исходного набора данных находилась в пределах допуска точки.
tol = 0.05;
C = uniquetol(y,tol,'ByRows',true);Постройте график уменьшенного набора точек в виде красных точек поверх исходного набора данных. Красные точки являются элементами исходного набора данных. Все красные точки - это, по крайней мере, расстояние tol особняком.
plot(y(:,1),y(:,2),'.') hold on axis equal plot(C(:,1), C(:,2), '.r', 'MarkerSize', 10)

Создайте вектор случайных чисел и определите уникальные элементы с помощью допуска. Определить OutputAllIndices как true для возврата всех индексов элементов, находящихся в пределах допуска к уникальным значениям.
A = rand(100,1);
[C,IA] = uniquetol(A,1e-2,'OutputAllIndices',true);Найти среднее значение элементов, находящихся в пределах допуска к значению C(2).
C(2)
ans = 0.0318
allA = A(IA{2})allA = 3×1
0.0357
0.0318
0.0344
aveA = mean(allA)
aveA = 0.0340
По умолчанию uniquetol использует проверку формы на допуск abs(u-v) <= tol*DS, где DS автоматически масштабируется на основе величины входных данных. Можно указать другое DS значение для использования с DataScale вариант. Однако абсолютные допуски (где DS является скаляром) не масштабировать на основе величины входных данных.
Сначала сравните два небольших значения, которые являются расстоянием eps особняком. Определить tol и DS для создания уравнения допуска в пределах: abs(u-v) <= 10^-6.
x = 0.1;
uniquetol([x, exp(log(x))], 10^-6, 'DataScale', 1)ans = 0.1000
Затем увеличьте величину значений. Ошибка округления в расчете exp(log(x)) пропорционально величине значений, в частности eps(x). Несмотря на то, что два больших значения являются расстоянием eps друг от друга, eps(x) теперь намного больше. Поэтому 10^-6 больше не является подходящим допуском.
x = 10^10;
uniquetol([x, exp(log(x))], 10^-6, 'DataScale', 1)ans = 1×2
1010 ×
1.0000 1.0000
Исправьте эту проблему, используя значение по умолчанию (масштабированное), равное DS.
format long
Y = [0.1 10^10];
uniquetol([Y, exp(log(Y))])ans = 1×2
1010 ×
0.000000000010000 1.000000000000000
Создание набора случайных точек 2-D, а затем использование uniquetol для группирования точек по вертикальным полосам с аналогичной координатой x (в пределах допуска). Используйте эти опции с uniquetol:
Определить ByRows как true поскольку координаты точек находятся в строках A.
Определить OutputAllIndices как true возвращает индексы для всех точек, которые имеют координату X в пределах допуска друг друга.
Определить DataScale как [1 Inf] использование абсолютного допуска для x-координация при игнорировании y-координата.
A = rand(1000,2); DS = [1 Inf]; [C,IA] = uniquetol(A, 0.1, 'ByRows', true, ... 'OutputAllIndices', true, 'DataScale', DS);
Постройте график точек и среднего значения для каждой области данных.
hold on for k = 1:length(IA) plot(A(IA{k},1), A(IA{k},2), '.') meanAi = mean(A(IA{k},:)); plot(meanAi(1), meanAi(2), 'xr') end

A - Массив запросовМассив запросов, заданный как скаляр, вектор, матрица или многомерный массив. A должно быть заполнено.
Типы данных: single | double
tol - Допуск сравненияДопуск сравнения, заданный как положительный, действительный скаляр. uniquetol масштабирует tol ввод с использованием максимального абсолютного значения во входном массиве A. Тогда uniquetol использует результирующий масштабируемый допуск сравнения для определения элементов в A уникальны. Если два элемента в A находятся в пределах допуска друг к другу, то uniquetol считает их равными.
Два значения, u и v, находятся в пределах допуска, если abs(u-v) <= tol*max(abs(A)).
Чтобы задать абсолютный допуск, укажите оба tol и 'DataScale' Пара Наименование (Name) - Значение (Value).
Пример: tol = 0.05
Пример: tol = 1e-8
Пример: tol = eps
Типы данных: single | double
Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.
C = uniquetol(A,'ByRows',true)'OutputAllIndices' - Тип выходного индексаfalse (по умолчанию) | true | 0 | 1Тип выходного индекса, указанный как разделенная запятыми пара, состоящая из 'OutputAllIndices' и либо false (по умолчанию), true, 0, или 1. uniquetol интерпретирует числовые 0 как false и числовые 1 как true.
Когда OutputAllIndices является true, uniquetol функция возвращает второй вывод, IA, как массив ячеек. Массив ячеек содержит индексы для всех элементов в A которые находятся в пределах допуска значения в C. То есть каждая ячейка в IA соответствует значению в Cи значения в каждой ячейке соответствуют местоположениям в A.
Пример: [C,IA] = uniquetol(A,tol,'OutputAllIndices',true)
'ByRows' - Переключатель сравнения строкfalse (по умолчанию) | true | 0 | 1Переключатель сравнения строк, заданный как разделенная запятыми пара, состоящая из 'ByRows' и либо false (по умолчанию), true, 0, или 1. uniquetol интерпретирует числовые 0 как false и числовые 1 как true. Используйте этот параметр для поиска строк в A уникальные, в пределах допуска.
Когда ByRows является true:
A должен быть 2-D массивом.
uniquetol сравнивает строки A рассматривая каждый столбец отдельно. Чтобы две строки находились в пределах допуска друг к другу, каждый столбец должен находиться в допуске.
Каждая строка в A находится в пределах допуска строки в C. Однако никаких двух строк в C находятся в пределах допуска друг к другу.
Две строки, u и v, находятся в пределах допуска, если all(abs(u-v) <= tol*max(abs(A),[],1)).
Пример: C = uniquetol(A,tol,'ByRows',true)
'DataScale' - Масштаб данныхМасштаб данных, указанный как разделенная запятыми пара, состоящая из 'DataScale' и скаляр или вектор. Определить DataScale как числовой скаляр, DS, чтобы изменить тест допуска на abs(u-v) <= tol*DS.
При использовании вместе с ByRows опция, DataScale значение также может быть вектором. В этом случае каждый элемент вектора определяет DS для соответствующего столбца в A. Если значение в DataScale вектор - Inf, то uniquetol игнорирует соответствующий столбец в A.
Пример: C = uniquetol(A,'DataScale',1)
Пример: [C,IA,IC] = uniquetol(A,'ByRows',true,'DataScale',[eps(1) eps(10) eps(100)])
Типы данных: single | double
C - Уникальные элементы в AУникальные элементы в A (в пределах допуска), возвращается в виде вектора или матрицы. Если A является вектором строки, то C также является вектором строки. В противном случае C является вектором-столбцом. Элементы в C сортируются в порядке возрастания. Каждый элемент в A находится в пределах допуска элемента в C, но никаких двух элементов в C находятся в пределах допуска друг к другу.
Если ByRows опция - true, то C является матрицей, содержащей уникальные строки в A. В этом случае строки в C сортируются в порядке возрастания по первому столбцу. Каждая строка в A находится в пределах допуска строки в C, но не две строки в C находятся в пределах допуска друг к другу.
IA - Индекс для AИндекс в A, возвращается в виде вектора-столбца индексов к первому появлению повторяющихся элементов или в виде массива ячеек. IA в целом удовлетворяет C = A(IA), за следующими исключениями:
Если ByRows опция - true, то C = A(IA,:).
Если OutputAllIndices опция - true, то IA является массивом ячеек и C(i)~A(IA{i}) где ~ означает, что значения находятся в пределах допуска друг к другу.
IC - Индекс для CИндекс в C, возвращается в виде вектора столбцов индексов. IC удовлетворяет следующим свойствам, где ~ означает, что значения находятся в пределах допуска друг к другу.
Если A является вектором, то A~C(IC).
Если A является матрицей, то A(:)~C(IC).
Если ByRows опция - true, то A~C(IC,:).
Может быть несколько допустимых C выходы, удовлетворяющие условию, не два элемента в C находятся в пределах допуска друг к другу. uniquetol функция возвращает только один из допустимых выходов.
uniquetol сортирует входные данные лексикографически, а затем начинает с самого низкого значения, чтобы найти уникальные значения в пределах допуска. В результате изменение сортировки входных данных может изменить выходные данные. Например, uniquetol(-A) может не дать тех же результатов, что и -uniquetol(A).
Примечания и ограничения по использованию:
'ByRows' и 'OutputAllIndices' параметры не поддерживаются.
64-разрядные целые числа не поддерживаются.
Дополнительные сведения см. в разделе Запуск функций MATLAB на графическом процессоре (панель инструментов параллельных вычислений).
eps | ismember | ismembertol | unique
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.