如何计算两点之间的最小距离?
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);
但是我意识到这是两个“慢”和耗费时间。
有什么方法可以使代码更“快”吗? ?
接受的答案
骑自行车的人
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
注意,我做了几个其他的变化。首先,我使用readtable importdata,所以它会在这里工作。其次,我改变了几个变量名称,这些名称之间的持续治疗你的两个文件。
我建议你彻底调试我改变(可能在一小部分数据),以确保你仍然得到你期望的结果。
我希望会有帮助!