如何计算两点之间的最小距离?

6视图(30天)
你好,
我有一个问题关于一个代码。我有两个输入文件(file1。txt和file2.txt),每个人都有三列:第一个纬度,第二longtitude和第三一个数值。第二个. txt文件有200000行,第一个. txt文件有1000行。我想计算每个点的最小距离从file2文件1。txt(我的意思是,我想找到最接近file2点。txt中为每个点)。
我使用下面的线,
clc
清晰的
filename1 =“中”;
(d1,特克斯)= importdata (filename1);
lat1 = d1.data (:, 2);
lon2 = d1.data (: 1);
t = importdata (“file2.txt”);
lat2 = t (:, 2);
lon2 = t (: 1);
z2 = t (:, 3);
z = 1:尺寸(lat1, 1);
j = 1:大小(t, 1);
输出(z, j) = (deg2km(距离(lat1 (z), lon1 (z), lat2 (j), lon2 (j))));
结束
结束
V =输出';
% = = = = = = = = = = = = = = = = = =距离= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
[M,我]= min (V, [], 2);
但是我意识到这是两个“慢”和耗费时间。
有什么方法可以使代码更“快”吗? ?
2的评论
伊凡密歇根州
伊凡密歇根州 2022年9月22日
我上传这些文件。我希望你能帮我…
谢谢你!

登录置评。

接受的答案

骑自行车的人
骑自行车的人 2022年9月22日
我不肯定,这段代码相当于你写什么,因为我无法在我的本地机器上测试它。(我没有一个工具箱的距离函数。)
不过,我相信你可以vectorize距离函数的输入,你应该得到一个很大的加速。(non-vectorized版本甚至没有超时期内完成。)
%开始计时
抽搐
%从网络读取数据文件。(你应该从你的本地文件读取)。
filename1 =“//www.tatmou.com/matlabcentral/answers/uploaded_files/1133265/file1.txt”;
filename2 =“//www.tatmou.com/matlabcentral/answers/uploaded_files/1133270/file2.txt”;
%读入数据。(readtable代替importdata使用。)
d1 = readtable (filename1);
d2 = readtable (filename2);
%的纬度和经度变量提取两个文件。
%(使用花括号,专栏内容,而不是一个单列表。)
lat1 = d1 {: 2};
lon1 = d1 {: 1};
lat2 = d2 {: 2};
lon2 = d2 {: 1};
% Preallocate输出,为更好的内存管理
输出= 0(大小(d1, 1),大小(d2, 1));
%计算距离
i1 = 1:尺寸(lat1, 1)
输出(i1,:) = (deg2km(距离(lat1 (i1) lon1 (i1) lat2, lon2)));
结束
V =输出';
% = = = = = = = = = = = = = = = = = =距离= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
[M,我]= min (V, [], 2);
toc
运行时间是2.003897秒。
注意,我做了几个其他的变化。首先,我使用readtable importdata,所以它会在这里工作。其次,我改变了几个变量名称,这些名称之间的持续治疗你的两个文件。
我建议你彻底调试我改变(可能在一小部分数据),以确保你仍然得到你期望的结果。
我希望会有帮助!

答案(1)

骑自行车的人
骑自行车的人 2022年9月22日
我怀疑这是 主要 减缓问题的代码,但是你应该preallocate输出数组的内存。日益递增数组可能导致内存使用效率很低。看到更多的细节 在这里
把线
输出= 0(大小(lat1, 1),大小(t, 1));
在你 循环。

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!