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