Уникальные значения в допуске
C = uniquetol(A,tol)
C = uniquetol(A)
[C,IA,IC] = uniquetol(___)
[___] = uniquetol(___,Name,Value)
возвращает уникальные элементы в C = uniquetol(A,tol)
A
с помощью допуска tol
. Два значения, u
и v
, в допуске если
abs(u-v) <= tol*max(abs(A(:)))
Таким образом, uniquetol
масштабирует входной параметр tol
на основе значения данных.
uniquetol
подобен unique
. Принимая во внимание, что unique
выполняет точные сравнения, uniquetol
выполняет сравнения с помощью допуска.
использует допуск по умолчанию C = uniquetol(A)
1e-6
для входных параметров с одинарной точностью и 1e-12
для с двойной точностью входных параметров.
возвращает индексные векторы [C,IA,IC] = uniquetol(___)
IA
и IC
, такой, что C = A(IA)
и A~C(IC)
(или A(:)~C(IC)
, если 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:6)'*pi; y = 10.^log10(x);
Объедините x
и y
в единственный вектор, A
. Используйте uniquetol
, чтобы восстановить A
, обрабатывая значения, которые являются в допуске как равный.
A = [x;y]
A = 12×1
3.1416
6.2832
9.4248
12.5664
15.7080
18.8496
3.1416
6.2832
9.4248
12.5664
⋮
[C,IA,IC] = uniquetol(A); newA = C(IC)
newA = 12×1
3.1416
6.2832
9.4248
12.5664
15.7080
18.8496
3.1416
6.2832
9.4248
12.5664
⋮
Можно использовать newA
с ==
или функциями, которые используют точное равенство как isequal
или unique
в последующем коде.
D1 = unique(A)
D1 = 8×1
3.1416
3.1416
6.2832
9.4248
12.5664
15.7080
18.8496
18.8496
D2 = unique(newA)
D2 = 6×1
3.1416
6.2832
9.4248
12.5664
15.7080
18.8496
Создайте облако 2D точек выборки, ограниченных быть в кругу радиуса 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
Создайте набор случайных 2D точек, затем используйте 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'
.
Пример: tol = 0.05
Пример: tol = 1e-8
Пример: tol = eps
Типы данных: single | double
Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми.
Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение.
Имя
должно появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.
C = uniquetol (A, 'ByRows', верный)
'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', верный)
'ByRows'
Переключатель сравнения строкиfalse
(значение по умолчанию) | true
| 0
| 1
Переключатель сравнения строки, заданный как пара, разделенная запятой, состоящая из 'ByRows'
и или false
(значение по умолчанию), true
, 0
, или 1
. uniquetol
интерпретирует числовой 0
как false
и числовой 1
как true
. Используйте эту опцию, чтобы найти строки в A
, которые уникальны в допуске.
Когда ByRows
является true
:
A
должен быть 2D массивом.
uniquetol
сравнивает строки A
путем рассмотрения каждого столбца отдельно. Для двух строк, чтобы быть в допуске друг друга, каждый столбец должен быть в допуске.
Каждая строка в A
в допуске строки в C
. Однако никакие две строки в C
не в допуске друг друга.
Две строки, u
и v
, в допуске если all(abs(u-v) <= tol*max(abs(A),[],1))
.
Пример: C = uniquetol (A, tol, 'ByRows', верный)
'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', верный, '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 Выполнения на GPU (Parallel Computing Toolbox).
eps
| ismember
| ismembertol
| уникальный
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.