Python 从位置列表构建距离矩阵
我有一个文本文件,其中包含不同的城市和特定的Python 从位置列表构建距离矩阵,python,matrix,distance,Python,Matrix,Distance,我有一个文本文件,其中包含不同的城市和特定的lat和long值,以及可以使用Google maps API获取初始原点位置和目标位置并返回两点之间距离的代码。我正在努力解决的是如何构建一个如下所示的距离矩阵: x loc1 loc2 loc3 ... loc1 [0 3 4] loc2 [5 0 7] loc3 [9
la
t和long
值,以及可以使用Google maps API
获取初始原点位置和目标位置并返回两点之间距离的代码。我正在努力解决的是如何构建一个如下所示的距离矩阵:
x loc1 loc2 loc3 ...
loc1 [0 3 4]
loc2 [5 0 7]
loc3 [9 2 0]
....
location1, lat1, long1
location2 lat2, long2
location3, lat3, long3
文本文件如下所示:
x loc1 loc2 loc3 ...
loc1 [0 3 4]
loc2 [5 0 7]
loc3 [9 2 0]
....
location1, lat1, long1
location2 lat2, long2
location3, lat3, long3
关于如何处理这个问题有什么建议吗?我觉得我让事情变得更复杂了。我想到的只是迭代一个循环,其中它取第一个位置,然后遍历所有其他位置,并在循环回开始之前将第一行附加到末尾。这假设知道文本文件中的行数,这很好,但是重新构造生成的数组会很麻烦。这是我一直在寻找的答案,以防有人好奇 XXXXXXXXXXXXXXXXXXXX回答: 所以你有一个zip(n)列表,其中n=1…n 每个zip(n)包含一个lat值和一个long值——比如zip(n)。lat=44.22;拉链(n).长=39.17 距离矩阵将是M(N,N)-一个正方形矩阵,其中对角线始终为0,因为距离zip(N)=zip(N)。此外,矩阵的上半部分与下半部分相同。意思是zip1到zipX与zipX到zip1相同。因此,您只需要计算矩阵的1/2,不包括对角线。您可以将其用作错误检查 他的代码相当混乱,不是用python编写的,但是逻辑过程仍然是一样的,这就是我一直坚持的。我将他的代码粘贴在下面,如果人们对它感兴趣(用java编写) for循环的类型为:
Map<int,int> M = new HashMap<int,int>(); - in Java all values are initialized to 0 for you; index goes from 0...N-1
for (int r = 1; r < N-1; r++) { // Skip the two corners (0,0) and (N-1,N-1) which are 0
for (int c = r + 1; c < N; c++) {
M(r,c) = getDistance(zip(r),zip(c));
}; // end for c
}; // end for r
You can also use an Map of Integers where the key is the string r+","+c
Map<String,Integer> M = new HashMap<String,Integer>();
for (int r = 1; r < N-1; r++) { // Skip the two corners (0,0) and (N-1,N-1) which are 0
M.put(r+","+r,new Integer(0)); // diagonal
for (int c = r + 1; c < N; c++) {
M.put(r+","+c,new Integer(getDistance(zip(r),zip(c))); // Upper half
M.put(c+","+r,new Integer(getDistance(zip(r),zip(c))); // Lower half
}; // end for c
}; // end for r
M.put("0,0",new Integer(0)); // upper left corner
M.put((N-1)+","+(N-1),new Integer(0)); // lower right corner
Map M=newhashmap();-在Java中,所有值都被初始化为0;索引从0…N-1开始
对于(int r=1;r
很不错,但这不是Python:P