ismembertol
許容誤差内のデータの集合メンバーを検索する
構文
説明
は、LIA = ismembertol(A,B,tol)A の要素が B の要素の許容誤差内にある場合、logical 1 (true) を含む配列を返します。それ以外の場合、配列は logical 0 (false) を含みます。u と v の 2 つの値は、次が満たされる場合に許容誤差内にあります。
abs(u-v) <= tol*max(abs([A(:);B(:)]))
つまり、ismembertol はデータの大きさに基づいて tol 入力をスケーリングします。
ismembertol は ismember と似ています。ismember は厳密な比較を実行しますが、ismembertol は許容誤差を使用して比較を行います。
[___] = ismembertol(___, は、前述の構文にある任意の入力引数または出力引数を組み合わせて、1 つ以上の名前と値のペアの引数で指定される追加のオプションを使用します。たとえば、Name,Value)ismembertol(A,B,'ByRows',true) は A と B の行を比較して論理列ベクトルを返します。
例
ベクトル x を作成します。x の変換と復元を実行して、2 番目のベクトル y を取得します。この変換により 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 を使用して、y に含まれる x の要素を検索します。関数 ismember は厳密な比較を実行し、x にある行列要素の一部が y に含まれないことを判別します。
lia = ismember(x,y)
lia = 6×1 logical array
0
1
1
1
1
0
ismembertol を使用して、わずかな誤差が許される比較を実行します。ismembertol は、許容誤差内の要素を等価として扱い、x 内のすべての要素が y のメンバーであると判断します。
LIA = ismembertol(x,y)
LIA = 6×1 logical array
1
1
1
1
1
1
既定では、ismembertol は許容誤差内の "要素" を検索しますが、許容誤差内にある行列の "行" を検索することもできます。
数値行列 A を作成します。A の変換と復元を実行して、2 番目の行列 B を取得します。この変換により 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 を使用して、B にある A の行を検索します。ismember は厳密な比較を実行します。したがって、誤差がごくわずかな場合も含め、A のほとんどの行が B に含まれないと判断します。
lia = ismember(A,B,'rows')lia = 5×1 logical array
0
0
0
0
1
ismembertol を使用して、わずかな誤差が許容される行の比較を行います。ismembertol は許容誤差内の行を等価として扱うため、A のすべての行が B のメンバーであると判断します。
LIA = ismembertol(A,B,'ByRows',true)LIA = 5×1 logical array
1
1
1
1
1
乱数のベクトルを 2 つ作成し、許容誤差を使用して B にも含まれる A の値を判別します。A 内で対応する要素の許容誤差内にある B の要素の全インデックスを返すには、OutputAllIndices を true に指定します。
rng(5)
A = rand(1,15);
B = rand(1,5);
[LIA,LocAllB] = ismembertol(A,B,0.2,'OutputAllIndices',true)LIA = 1×15 logical array
1 0 1 0 1 1 1 1 1 1 0 1 1 1 0
LocAllB=1×15 cell array
{2×1 double} {[0]} {2×1 double} {[0]} {3×1 double} {2×1 double} {[4]} {3×1 double} {3×1 double} {2×1 double} {[0]} {2×1 double} {4×1 double} {2×1 double} {[0]}
値 A(13) の許容誤差内にある B の要素の平均値を求めます。セル LocAllB{13} に、A(13) の許容誤差内にある B の要素の全インデックスが含まれます。
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 だけ離れている 2 つの小さい値を比較します。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) に比例します。2 つの大きい値間の距離が 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 = 1×2 logical array
1 1
まず 2 次元の乱数点の集合を作成します。次に ismembertol を使用して、これらの点を、クエリ点の少数集合 B に対して類似した (許容誤差内の) x 座標をもつ縦の帯域に分類します。ismembertol には次のオプションを指定します。
点の座標は
AとBの行に含まれるため、ByRowsをtrueに指定します。OutputAllIndicesをtrueに指定して、x 座標がBのクエリ点の許容誤差内にある、Aのすべての点に対してインデックスを返すようにします。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 = 6×1 logical array
1
1
1
1
1
1
LocAllB=6×1 cell array
{ 94×1 double}
{223×1 double}
{195×1 double}
{212×1 double}
{187×1 double}
{ 89×1 double}
B の各クエリ点の許容誤差内にある A の点をプロットします。
hold on plot(B(:,1),B(:,2),'x') for k = 1:length(LocAllB) plot(A(LocAllB{k},1), A(LocAllB{k},2),'.') end

入力引数
クエリ配列。スカラー、ベクトル、行列または多次元配列として指定します。入力 A および B は非スパースでなければなりません。
ByRows オプションを指定する場合、A と B の列数は同じでなければなりません。
データ型: single | double
クエリ配列。スカラー、ベクトル、行列または多次元配列として指定します。入力 A および B は非スパースでなければなりません。
ByRows オプションを指定する場合、A と B の列数は同じでなければなりません。
データ型: single | double
比較許容誤差。正の実数のスカラーとして指定します。ismembertol は、入力配列 A および B の最大絶対値を使用して tol の入力をスケーリングします。その後、ismembertol は、スケーリングした結果の比較許容誤差を使用して、B のメンバーでもある A の要素を判別します。2 つの要素が互いに許容誤差内にある場合、ismembertol はこれらの要素を等価とみなします。
u と v の 2 つの値は、abs(u-v) <= tol*max(abs([A(:);B(:)])) である場合に許容誤差内にあります。
絶対許容誤差を指定するには、tol および名前と値のペア 'DataScale' の両方を指定します。
例: tol = 0.05
例: tol = 1e-8
例: tol = eps
データ型: single | double
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。
例: LIA = ismembertol(A,B,'ByRows',true)
出力インデックス タイプ。'OutputAllIndices' と、false (既定)、true、0 または 1 のいずれかで構成されるコンマ区切りのペアとして指定します。ismembertol は、数値の 0 を false、1 を true と解釈します。
OutputAllIndices が true である場合、関数 ismembertol は 2 番目の出力 LocB を cell 配列として返します。cell 配列には A の対応する値の許容誤差内にある、B の "すべての" 要素のインデックスが含まれます。つまり、LocB の各セルが A の値に対応し、各セル内の値は B での位置に対応します。
例: [LIA,LocAllB] = ismembertol(A,B,tol,'OutputAllIndices',true)
行比較の切り替え。'ByRows' と、false (既定)、true、0 または 1 のいずれかで構成されるコンマ区切りのペアとして指定します。ismembertol は数値の 0 を false、数値の 1 を true と解釈します。このオプションは A と B で許容誤差内にある行を検索するために使用します。
ByRows が true である場合、次のようになります。
ismembertolは、AとBの行を個々の列ごとに比較します。したがって、AとBは同じ列数の 2 次元配列でなければなりません。Aで対応する行がBの行から許容誤差内にある場合、LIAは logical1(true) を含みます。それ以外の場合、logical0(false) が含まれます。
u と v の 2 つの行は、all(abs(u-v) <= tol*max(abs([A;B]))) の場合に許容誤差内にあります。
例: LIA = ismembertol(A,B,tol,'ByRows',true)
データのスケール。'DataScale' と、スカラーまたはベクトルで構成されるコンマ区切りのペアとして指定します。DataScale を数値スカラー DS として指定し、許容誤差テストを abs(u-v) <= tol*DS になるよう変更します。
ByRows オプションと共に使用する場合、DataScale の値をベクトルにすることもできます。この場合、ベクトルの各要素は A で対応する列の DS を指定します。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
出力引数
A への論理インデックス。A 内の要素または行が許容誤差内で B のメンバーである場合に logical 1 (true) を含むベクトルまたは行列として返されます。それ以外の場合、LIA は logical 0 (false) を含みます。
LIA は A と同じサイズです。ただし、ByRows オプションを指定した場合を除きます。その場合は、LIA は A と同じ行数をもつ列ベクトルになります。
B 内の場所。ベクトル、行列または cell 配列として返されます。LocB には、許容誤差内で A で見つかった B の要素または行へのインデックスが含まれます。A の要素が B のメンバーでない場合、LocB には 0 が含まれます。
既定では、LocB の各要素は、A の対応する要素の許容誤差内にある B の最初の要素のインデックスです。OutputAllIndices を true として指定すると、代わりに、LocB は、A の対応する値の許容誤差内にある B の "すべての" 要素のインデックスを含む cell 配列として返されます。つまり、LocB の各 cell は A の値に対応し、各 cell の値は許容誤差内の要素に対する B のインデックスになります。
LocB は A と同じサイズです。ただし、ByRows オプションを指定した場合を除きます。その場合は、LocB は A と同じ行数をもつ列ベクトルになります。
拡張機能
この関数はスレッドベースの環境を完全にサポートしています。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
ismembertol 関数は GPU 配列入力をサポートしますが、次の使用上の注意および制限があります。
'ByRows'引数と'OutputAllIndices'引数はサポートされません。64 ビット整数はサポートされません。
詳細については、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2015a で導入
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)