「実質的に同等」とは、それらの距離がイプシロン程度離れている(または0.000001)ことを意味します。MATLABの等式は、長い浮動小数点数では実際には機能しないことがよくあります。
単純にabs(A1-A2)<0.000001を実行すると、size(A1)!= size(A2)であるため、機能しません。
pdist2
MATLAB の関数を使用して 2 つのベクトル間の距離を計算すると、答えが得られます。
dist=pdist2(A1,A2);
minDist=min(dist,[],2);
indices_A1=minDist<=0.000001;
desired_A1=A1(indices_A1);
テストされていませんが、動作するはずです。
任意の要素から任意の要素までの距離に関心があるため、ベクトル化された行列から距離行列を作成し、距離のしきい値をプローブすることができます。例:
A = rand(10, 4); % (example) matrix A
B = rand(3, 5); % matrix B of different size
minDist = 0.005;
解決策: ベクトル化された行列を列方向および行方向に繰り返して、同じサイズの行列を取得し、行列ベースの距離推定を適用します。
Da = repmat(A(:), 1, length(B(:))); % size 40 x 15
Db = repmat(B(:)', length(A(:)), 1); % size 40 x 15
DD = Da - Db;
indA = any(abs(DD) < minDist, 2);
を使用すると、 の任意の値に近いany()
の任意の値への論理インデックスが得られます)。使用する要素を直接インデックス付け/返すことができますA
B
A
indA.
行列DD(@Shaiも指摘しているように)は、次の方法で同等に推定できますbsxfun
DD = bsxfun(@minus, A(:), B(:)');
さらに、以下を使用して、行インデックス (A 要素に対応) から行列 A インデックスにマップすることができます。
[iA, jA] = ind2sub(size(A), indA);
返されたすべての値が 未満であることをアサート/テストminDist
します。たとえば、次を使用します。
for k = 1:length(iA);
d(k) = min(min(abs(A(iA(k), jA(k)) - B)));
end
all(d < minDist)
(Octave 3.6.2 でテスト済み)