4

「実質的に同等」とは、それらの距離がイプシロン程度離れている(または0.000001)ことを意味します。MATLABの等式は、長い浮動小数点数では実際には機能しないことがよくあります。

単純にabs(A1-A2)<0.000001を実行すると、size(A1)!= size(A2)であるため、機能しません。

4

2 に答える 2

5

pdist2MATLAB の関数を使用して 2 つのベクトル間の距離を計算すると、答えが得られます。

dist=pdist2(A1,A2);
minDist=min(dist,[],2);
indices_A1=minDist<=0.000001;
desired_A1=A1(indices_A1);

テストされていませんが、動作するはずです。

于 2013-02-26T04:17:36.003 に答える
1

任意の要素から任意の要素までの距離に関心があるため、ベクトル化された行列から距離行列を作成し、距離のしきい値をプローブすることができます。例:

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()の任意の値への論理インデックスが得られます)。使用する要素を直接インデックス付け/返すことができますABAindA.

行列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 でテスト済み)

于 2013-02-26T05:17:01.840 に答える