Представители набора в пределах допуска
возвращает массив, содержащий логические LIA
= ismembertol(A
,B
,tol
)1
(true
) где элементы A
находятся в пределах допуска к элементам в B
. В противном случае массив содержит логические 0
(false
). Два значения, u
и v
, находятся в пределах допуска, если
abs(u-v) <= tol*max(abs([A(:);B(:)]))
То есть, ismembertol
масштабирует tol
вход, основанный на величине данных.
ismembertol
подобно тому, как ismember
. Принимая во внимание, что ismember
выполняет точные сравнения, ismembertol
выполняет сравнение с использованием допуска.
[___] = ismembertol(___,
использует дополнительные опции, заданные одним или несколькими аргументами пары "имя-значение", используя любую из комбинаций входных или выходных аргументов в предыдущих синтаксисах. Для примера, Name,Value
)ismembertol(A,B,'ByRows',true)
сравнивает строки A
и B
и возвращает логический вектор-столбец.
Создайте вектор 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
Использование ismember
для поиска элементов x
которые находятся в y
. The ismember
функция выполняет точные сравнения и определяет, что некоторые из элементов матрицы в x
не являются представителями y
.
lia = ismember(x,y)
lia = 6x1 logical array
0
1
1
1
1
0
Использование ismembertol
для сравнения с использованием небольшого допуска. ismembertol
рассматривает элементы, находящиеся в пределах допуска, как равные и определяет, что все элементы в x
являются представителями y
.
LIA = ismembertol(x,y)
LIA = 6x1 logical array
1
1
1
1
1
1
По умолчанию ismembertol
ищет элементы, которые находятся в пределах допуска, но также может найти строки матрицы, которые находятся в пределах допуска.
Создайте числовую матрицу, 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; 0.82 0.91 1.00];
B = log10(10.^A);
Использование ismember
для поиска строк A
которые находятся в B
. ismember
выполняет точные сравнения и таким образом определяет, что большинство строк в A
не являются представителями B
, хотя некоторые из строк отличаются лишь небольшим количеством.
lia = ismember(A,B,'rows')
lia = 5x1 logical array
0
0
0
0
1
Использование ismembertol
для сравнения строк с использованием небольшого допуска. ismembertol
обрабатывает строки, которые находятся в пределах допуска, как равные и, таким образом, определяет, что все строки в A
являются представителями B
.
LIA = ismembertol(A,B,'ByRows',true)
LIA = 5x1 logical array
1
1
1
1
1
Создайте два вектора случайных чисел и определите, какие значения в A
также являются представителями B
, с использованием допуска. Задайте OutputAllIndices
как true
для возврата всех индексов для элементов в B
которые находятся в пределах допуска к соответствующим элементам в A
.
rng(5)
A = rand(1,15);
B = rand(1,5);
[LIA,LocAllB] = ismembertol(A,B,0.2,'OutputAllIndices',true)
LIA = 1x15 logical array
1 0 1 0 1 1 1 1 1 1 0 1 1 1 0
LocAllB=1×15 cell array
Columns 1 through 5
{2x1 double} {[0]} {2x1 double} {[0]} {3x1 double}
Columns 6 through 10
{2x1 double} {[4]} {3x1 double} {3x1 double} {2x1 double}
Columns 11 through 15
{[0]} {2x1 double} {4x1 double} {2x1 double} {[0]}
Найдите среднее значение элементов в B
которые находятся в пределах допустимого значения A(13)
. Область камеры LocAllB{13}
содержит все индексы для элементов в B
которые находятся в пределах допуска A(13)
.
A(13)
ans = 0.4413
allB = B(LocAllB{13})
allB = 1×4
0.2741 0.4142 0.2961 0.5798
aveB = mean(allB)
aveB = 0.3911
По умолчанию ismembertol
использует проверочный тест формы abs(u-v) <= tol*DS
, где DS
автоматически шкалы на основе величины входных данных. Можно задать другое DS
значение для использования со DataScale
опция. Однако абсолютные погрешности (где DS
является скаляром) не масштабируются на основе величины входных данных.
Во-первых, сравните два малых значения, которые являются расстоянием eps
отдельно. Задайте tol
и DS
для создания уравнения внутри допуска abs(u-v) <= 10^-6
.
x = 0.1;
ismembertol(x, exp(log(x)), 10^-6, 'DataScale', 1)
ans = logical
1
Затем увеличьте величину значений. Ошибка округления в exp(log(x))
вычисления пропорционально величине значений, в частности
eps(x)
. Несмотря на то, что два больших значения являются расстоянием eps
друг от друга, eps(x)
теперь намного больше. Поэтому 10^-6
больше не является подходящим допуском.
x = 10^10;
ismembertol(x, exp(log(x)), 10^-6, 'DataScale', 1)
ans = logical
0
Исправьте эту проблему с помощью значения по умолчанию (масштабированного) DS
.
Y = [0.1 10^10]; ismembertol(Y, exp(log(Y)))
ans = 1x2 logical array
1 1
Создайте набор случайных 2-D точек и используйте ismembertol
чтобы сгруппировать точки в вертикальные полосы, которые имеют сходную (в пределах допуска) x-координату с небольшим набором точек запроса, B
. Используйте эти опции с ismembertol
:
Задайте ByRows
как true
, поскольку координаты точки указаны в строках A
и B
.
Задайте OutputAllIndices
как true
чтобы вернуть индексы для всех точек в A
которые имеют x-координату в пределах допуска к точкам запроса в B
.
Задайте DataScale следующим [1 Inf]
чтобы использовать абсолютную погрешность для координаты X, игнорируя при этом координату Y.
A = rand(1000,2); B = [(0:.2:1)',0.5*ones(6,1)]; [LIA,LocAllB] = ismembertol(B, A, 0.1, 'ByRows', true, ... 'OutputAllIndices', true, 'DataScale', [1,Inf])
LIA = 6x1 logical array
1
1
1
1
1
1
LocAllB=6×1 cell array
{ 94x1 double}
{223x1 double}
{195x1 double}
{212x1 double}
{187x1 double}
{ 89x1 double}
Постройте график точек в A
которые находятся в пределах допуска для каждой точки запроса в B
.
hold on plot(B(:,1),B(:,2),'x') for k = 1:length(LocAllB) plot(A(LocAllB{k},1), A(LocAllB{k},2),'.') end
A
- Массив запросовМассив запросов, заданный как скаляр, вектор, матрица или многомерный массив. Входные параметры A
и B
должен быть полным.
Если вы задаете ByRows
опция, затем A
и B
должно иметь одинаковое число столбцов.
Типы данных: single
| double
B
- Массив запросовМассив запросов, заданный как скаляр, вектор, матрица или многомерный массив. Входные параметры A
и B
должен быть полным.
Если вы задаете ByRows
опция, затем A
и B
должно иметь одинаковое число столбцов.
Типы данных: single
| double
tol
- Допуск сравненияДопуск сравнения, заданный как положительный действительный скаляр. ismembertol
масштабирует tol
ввести с использованием максимальных абсолютных значений во входных массивах A
и B
. Тогда ismembertol
использует полученный допуск масштабированного сравнения, чтобы определить, какие элементы в A
также являются представителем B
. Если два элемента находятся в пределах допуска друг к другу, то ismembertol
считает их равными.
Два значения, u
и v
, находятся в пределах допуска, если abs(u-v) <= tol*max(abs([A(:);B(:)]))
.
Чтобы задать абсолютную погрешность, задайте оба tol
и 'DataScale'
Пара "имя-значение".
Пример: tol = 0.05
Пример: tol = 1e-8
Пример: tol = eps
Типы данных: single
| double
Задайте необязательные разделенные разделенными запятой парами Name,Value
аргументы. Name
- имя аргумента и Value
- соответствующее значение. Name
должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN
.
LIA = ismembertol(A,B,'ByRows',true)
'OutputAllIndices'
- Тип выходного индексаfalse
(по умолчанию) | true
| 0
| 1
Выход индекса, заданный как разделенная разделенными запятой парами, состоящая из 'OutputAllIndices'
и любой из них false
(по умолчанию), true
, 0
, или 1
. ismembertol
интерпретирует числовые 0
как false
и числовые 1
как true
.
Когда OutputAllIndices
является true
, а ismembertol
функция возвращает второй выход, LocB
, как массив ячеек. Массив ячеек содержит индексы для всех элементов в B
которые находятся в допуск значения в A
. То есть каждая камера в LocB
соответствует значению в A
, и значения в каждой камере соответствуют местоположениям в B
.
Пример: [LIA,LocAllB] = ismembertol(A,B,tol,'OutputAllIndices',true)
'ByRows'
- Переключение сравнения строкfalse
(по умолчанию) | true
| 0
| 1
Переключатель сравнения строк, заданный как разделенная разделенными запятой парами, состоящая из 'ByRows'
и любой из них false
(по умолчанию), true
, 0
, или 1
. ismembertol
интерпретирует числовые 0
как false
и числовые 1
как true
. Используйте эту опцию для поиска строк в A
и B
которые находятся в пределах допуска.
Когда ByRows
является true
:
ismembertol
сравнивает строки A
и B
при рассмотрении каждого столбца отдельно. Таким образом, A
и B
должны быть 2-D массивами с одинаковым числом столбцов.
Если соответствующая строка в A
находится в пределах допуска строки в B
, затем LIA
содержит логические 1
(true
). В противном случае он содержит логические 0
(false
).
Две строки, u
и v
, находятся в пределах допуска, если all(abs(u-v) <= tol*max(abs([A;B])))
.
Пример: LIA = ismembertol(A,B,tol,'ByRows',true)
'DataScale'
- Шкала данныхШкала данных, заданная как разделенная разделенными запятой парами, состоящая из 'DataScale'
и либо скаляром, либо вектором. Задайте DataScale
как числовой скаляр, DS
, чтобы изменить проверочный тест на, abs(u-v) <= tol*DS
.
При использовании вместе с ByRows
опция, DataScale
значение также может быть вектором. В этом случае каждый элемент вектора задает DS
для соответствующего столбца в A
. Если значение в DataScale
вектор Inf
, затем ismembertol
игнорирует соответствующий столбец в A
.
Пример: LIA = ismembertol(A,B,'DataScale',1)
Пример: [LIA,LocB] = ismembertol(A,B,'ByRows',true,'DataScale',[eps(1) eps(10) eps(100)])
Типы данных: single
| double
LIA
- Логический индекс для A
Логический индекс для A
, возвращенный как вектор или матрица, содержащая логические 1
(true
) где бы ни находились элементы (или строки) в A
являются представителями B
(в пределах допуска). В другом месте, LIA
содержит логические 0
(false
).
LIA
- тот же размер, что и A
, если вы не задаете ByRows
опция. В этом случае LIA
- вектор-столбец с одинаковым числом строк, как и A
.
LocB
- Расположение в B
Местоположения в B
, возвращенный как вектор, матрица или массив ячеек. LocB
содержит индексы к элементам (или строкам) в B
которые найдены в A
(в пределах допуска). LocB
содержит 0
где бы ни находился элемент в A
не является представителем B
.
Если OutputAllIndices
является true
, затем ismembertol
возвращает LocB
как массив ячеек. Массив ячеек содержит индексы для всех элементов в B
которые находятся в допуск значения в A
. То есть каждая камера в LocB
соответствует значению в A
, и значения в каждой камере соответствуют местоположениям в B
.
LocB
- тот же размер, что и A
, если вы не задаете ByRows
опция. В этом случае LocB
- вектор-столбец с одинаковым числом строк, как и A
.
Указания и ограничения по применению:
The 'ByRows'
и 'OutputAllIndices'
аргументы не поддерживаются.
64-битные целые числа не поддерживаются.
Для получения дополнительной информации смотрите Запуск функций MATLAB на графическом процессоре (Parallel Computing Toolbox).
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.