通过“实际上等效”,我的意思是它们的距离相隔 epsilon(或 0.000001)。MATLAB 中的等式通常不适用于长浮点数。
如果我只是简单地做 abs(A1 - A2) < 0.000001,那么它不会起作用,因为 size(A1) != size(A2)
pdist2
您可以通过使用 MATLAB 的函数计算两个向量之间的距离来得到答案。
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 中测试)