Члены набора в допуске
возвращает массив, содержащий логический LIA = ismembertol(A,B,tol)1 TRUE) где элементы A в допуске элементов в B. В противном случае массив содержит логический 0 ложь). Два значения, 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 это находится в Bismember выполняет точные сравнения и таким образом решает что большинство строк в 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
Создайте набор случайных 2D точек, и затем используйте 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, или 1ismembertol интерпретирует числовой 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, или 1ismembertol интерпретирует числовой 0 как false и числовой 1 как true. Используйте эту опцию, чтобы найти строки в A и B это в допуске.
Когда ByRows true:
ismembertol сравнивает строки A и B путем рассмотрения каждого столбца отдельно. Таким образом, A и B должны быть 2D массивы с одинаковым числом столбцов.
Если соответствующая строка в A в допуске строки в B, затем LIA содержит логический 1 TRUE). В противном случае это содержит логический 0 ложь).
Две строки, 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 ложь).
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 Запуска на графическом процессоре (Parallel Computing Toolbox).
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.