在Matlab中,我有两个包含坐标的相当大的矩阵(A和B)。两条线代表x和y,每列代表笛卡尔坐标(x; y)。检查坐标是否在另一个矩阵中任意点的给定距离内
现在我想存储矩阵B中所有比1(米)更接近矩阵A中任意点的点。
我可以遍历所有的数据,但它非常耗时(矩阵是2x800000)。
有什么办法可以提升性能吗?
这是我当前的代码结构:
new_vec = [0;0];
for i=1:length(A)
cur_x = A(1, i);
cur_y = A(2, i);
for j=1:length(B)
if B(2, j) <= cur_y + 1 && B(2, j) >= cur_y - 1 && ...
B(1, j) <= cur_x + 1 && B(1, j) >= cur_x - 1
new_vec = [new_vec, [B(1, j); B(2, j)]];
end
end
end
现在您已经提供了代码,我看到您的“比1更接近”的定义由对x和y的单独检查组成。这意味着你的点可能有一个sqrt(2)的距离,并且不在范围内 - 这是有意的还是你会使用直接的二维(欧几里得)距离? – Wolfie
这是故意的,但是感谢提示 – user3932876
@ m7913d请注意,可以使用'pdist2',但对于这个尺寸的数据我们只想知道是否有距离小于1的数据可能会比较慢。另外,它们需要x y坐标为+/- 1,而不是1个单位,所以可能需要使用“城市街区距离” – Wolfie