このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
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 = 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
を作成します。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 = 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
ベクトルの類似値の平均
乱数のベクトルを 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 = 1x15 logical array
1 0 1 0 1 1 1 1 1 1 0 1 1 1 0
LocAllB=1×15 cell array
{2x1 double} {[0]} {2x1 double} {[0]} {3x1 double} {2x1 double} {[4]} {3x1 double} {3x1 double} {2x1 double} {[0]} {2x1 double} {4x1 double} {2x1 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 = 1x2 logical array
1 1
列単位の DataScale の指定
まず 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 = 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}
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
— クエリ配列
スカラー | ベクトル | 行列 | 多次元配列
クエリ配列。スカラー、ベクトル、行列または多次元配列として指定します。入力 A
および B
は非スパースでなければなりません。
ByRows
オプションを指定する場合、A
と B
の列数は同じでなければなりません。
データ型: single
| double
B
— クエリ配列
スカラー | ベクトル | 行列 | 多次元配列
クエリ配列。スカラー、ベクトル、行列または多次元配列として指定します。入力 A
および B
は非スパースでなければなりません。
ByRows
オプションを指定する場合、A
と B
の列数は同じでなければなりません。
データ型: single
| double
tol
— 比較許容誤差
正の実数のスカラー
比較許容誤差。正の実数のスカラーとして指定します。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
出力インデックス タイプ。'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
行比較の切り替え。'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'
と、スカラーまたはベクトルで構成されるコンマ区切りのペアとして指定します。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
出力引数
LIA
— A
への論理インデックス
ベクトル | 行列
A
への論理インデックス。A
内の要素または行が許容誤差内で B
のメンバーである場合に logical 1
(true
) を含むベクトルまたは行列として返されます。それ以外の場合、LIA
は logical 0
(false
) を含みます。
LIA
は A
と同じサイズです。ただし、ByRows
オプションを指定した場合を除きます。その場合は、LIA
は A
と同じ行数をもつ列ベクトルになります。
LocB
— B
内の場所
ベクトル | 行列 | cell 配列
B
内の場所。ベクトル、行列または cell 配列として返されます。LocB
には、許容誤差内で A
で見つかった B
の要素または行へのインデックスが含まれます。A
の要素が B
のメンバーでない場合、LocB
には 0
が含まれます。
OutputAllIndices
が true
の場合、ismembertol
は LocB
を cell 配列として返します。cell 配列には A
の対応する値の許容誤差内にある、B
の "すべての" 要素のインデックスが含まれます。つまり、LocB
の各セルが A
の値に対応し、各セル内の値は B
での位置に対応します。
LocB
は A
と同じサイズです。ただし、ByRows
オプションを指定した場合を除きます。その場合は、LocB
は A
と同じ行数をもつ列ベクトルになります。
拡張機能
スレッドベースの環境
MATLAB® の backgroundPool
を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool
を使用してコードを高速化します。
この関数はスレッドベースの環境を完全にサポートしています。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
GPU 配列
Parallel Computing Toolbox™ を使用してグラフィックス処理装置 (GPU) 上で実行することにより、コードを高速化します。
使用上の注意事項および制限事項:
'ByRows'
引数と'OutputAllIndices'
引数はサポートされません。64 ビット整数はサポートされません。
詳細については、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2015a で導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)