Уникальные значения в допуске
возвращает уникальные элементы в C
= uniquetol(A
,tol
)A
использование допуска tol
. Два значения, u
и v
, в допуске если
abs(u-v) <= tol*max(abs(A(:)))
Таким образом, uniquetol
масштабирует tol
введите на основе величины данных.
uniquetol
похоже на unique
. Принимая во внимание, что unique
выполняет точные сравнения, uniquetol
выполняет сравнения с помощью допуска.
, где C
= uniquetol(A
,tol
,occurrence
)occurrence
'highest'
, указывает, что, когда несколько значений в допуске друг друга, самое высокое значение должно быть выбрано как являющийся уникальным. Значение по умолчанию для occurrence
'lowest'
, который выбирает самое низкое значение, как являющееся уникальным.
[___] = 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
Используйте occurrence
опция, чтобы управлять, который элементы uniquetol
выбирает как являющийся уникальным.
Создайте вектор и найдите, какие элементы уникальны в допуске 1e-1
.
a = [1 1.1 1.11 1.12 1.13 2]; c = uniquetol(a,1e-1)
c = 1×2
1 2
Начиная с первых пяти элементов в A
у всех есть подобные значения относительно допуска 1e-1
, только самое низкое значение среди них выбрано как являющийся уникальным. Это вызвано тем, что uniquetol
начинается с самого низкого значения в a
и не находит новый элемент, который не является в допуске до 2
в конце вектора.
Используйте 'highest'
опция, чтобы задать тот uniquetol
должен начаться с самого высокого значения в a
. Теперь 1.13
элемент выбран как являющийся уникальным начиная с uniquetol
работает вниз от самых высоких значений.
d = uniquetol(a,1e-1,'highest')
d = 1×2
1.1300 2.0000
Создайте облако 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.0000 1.0000
Создайте набор случайных 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
occurrence
— Вхождение уникальных значений'lowest'
(значение по умолчанию) | 'highest'
Вхождение уникальных значений в виде одной из опций в этой таблице. Значение occurrence
определяет который элементы uniquetol
выбирает как являющийся уникальным.
Опция | Описание |
---|---|
'lowest' |
|
'highest' |
|
Пример: C = uniquetol(A,tol,'highest')
Пример: C = uniquetol([1 2 3],2,'highest')
возвращает 3
, с тех пор uniquetol
запускается с самого высокого значения во входе, и все другие значения в допуске.
Типы данных: char |
string
Задайте дополнительные разделенные запятой пары 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
должен быть 2D массив.
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
PreserveRange
— Переключатель сохранения области значенийfalse
(значение по умолчанию) | true
| 0
| 1
Сохранение области значений переключается в виде разделенной запятой пары, состоящей из 'PreserveRange'
и любой false
(значение по умолчанию), true
, 0, или
1
. uniquetol
интерпретирует числовой 0
как false
и числовой 1
как true
. Используйте эту опцию, чтобы указать что минимальные и максимальные значения в выходе C
должен совпасть с теми в A
.
Если минимальные и максимальные значения в A
в допуске tol
друг из друга, затем uniquetol
возвращает только одно из значений.
Пример: C = uniquetol(A,tol,'PreserveRange',true)
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,:)
.
uniquetol
сортирует вход лексикографически, и затем начинает в самом низком или самом высоком значении находить уникальные значения в допуске. В результате изменение сортировки входа могло изменить выход. Например, uniquetol(-A)
не может дать те же результаты как -uniquetol(A)
.
Могут быть несколько допустимый C
выходные параметры, которые удовлетворяют условию, никаким двум элементам в C
в допуске друг друга. uniquetol
функция может возвратить несколько из допустимых выходных параметров, в зависимости от ли значение occurrence
'highest'
или 'lowest'
и ли PreserveRange
опция задана.
backgroundPool
или ускорьте код с Parallel Computing Toolbox™ ThreadPool
.Эта функция полностью поддерживает основанные на потоке среды. Для получения дополнительной информации смотрите функции MATLAB Запуска в Основанной на потоке Среде.
Указания и ограничения по применению:
occurrence
аргумент для вхождения уникальных значений не поддерживается.
'ByRows'
'OutputAllIndices'
, и 'PreserveRange'
опции не поддерживаются.
64-битные целые числа не поддерживаются.
Для получения дополнительной информации смотрите функции MATLAB Запуска на графическом процессоре (Parallel Computing Toolbox).
ismembertol
| unique
| ismember
| eps
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.