Элементы набора в пределах допуска
возвращает массив, содержащий логический 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. 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' Пара Наименование (Name) - Значение (Value).
Пример: 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.
Примечания и ограничения по использованию:
'ByRows' и 'OutputAllIndices' аргументы не поддерживаются.
64-разрядные целые числа не поддерживаются.
Дополнительные сведения см. в разделе Запуск функций MATLAB на графическом процессоре (панель инструментов параллельных вычислений).
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.