Члены набора в допуске
LIA = ismembertol(A,B,tol)
LIA = ismembertol(A,B)
[LIA,LocB] = ismembertol(___)
[___] = ismembertol(___,Name,Value)
возвращает массив, содержащий логический 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
выполняет сравнения с помощью допуска.
использует допуск по умолчанию LIA = ismembertol(A,B)
1e-6
для входных параметров с одинарной точностью и 1e-12
для с двойной точностью входных параметров.
также возвращает массив, [LIA,LocB] = ismembertol(___)
LocB
, который содержит индексное местоположение в B
для каждого элемента в A
, который является членом B
. Можно использовать любой из входных параметров в предыдущих синтаксисах.
[___] = 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 = 1x15 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 = 6x1 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) — соответствующее значение.
Имя
должно появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.
LIA = ismembertol (A, B, 'ByRows', верный)
'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', верный)
'ByRows'
Переключатель сравнения строкиfalse
(значение по умолчанию) | true
| 0
| 1
Переключатель сравнения строки, заданный как пара, разделенная запятой, состоящая из 'ByRows'
и или false
(значение по умолчанию), true
, 0
, или 1
. ismembertol
интерпретирует числовой 0
как false
и числовой 1
как true
. Используйте эту опцию, чтобы найти строки в A
и B
, которые являются в допуске.
Когда ByRows
является true
:
ismembertol
сравнивает строки A
и B
путем рассмотрения каждого столбца отдельно. Таким образом A
и B
должны быть 2D массивами с тем же количеством столбцов.
Если соответствующая строка в A
в допуске строки в B
, то LIA
содержит логический 1
(true
). В противном случае это содержит логический 0
(false
).
Две строки, u
и v
, в допуске если all(abs(u-v) <= tol*max(abs([A;B])))
.
Пример: LIA = ismembertol (A, B, tol, 'ByRows', верный)
'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', верный, '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 Выполнения на GPU (Parallel Computing Toolbox).
eps
| ismember
| уникальный
| uniquetol
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.