如何创建已知距离的距离矩阵?

时间:2020-02-09 08:08:55

标签: python distance-matrix

我有一个csv。看起来像这样的文件:

| Start| End | Distance|
|------|-----|---------|
| A    | B   |        1|
| A    | C   |        2|
| B    | C   |        3|

所需的输出是数字列表,例如:

[[0,1,2],
 [1,0,3],
 [2,3,0]]

有人知道如何用Python编写代码吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

我使用正方形找到了该问题的简单答案:

import pandas as pd
from scipy.spatial.distance import squareform

df = pd.read_csv('File Name.csv')
distance_matrix = squareform(df['Distance']).tolist()
print(distance_matrix)

输出:

[[0,1,2],[1,0,3],[2,3,0]]

答案 1 :(得分:0)

您提到您有一个csv文件,因此假设您也有一个DataFrame

def construct_dist_matrix(df):
    alphabet = np.unique(df[["Start", "End"]].values.ravel("K"))
    lut = {x: i for i, x in enumerate(alphabet)}
    n = len(lut)
    mat = np.zeros((n, n))

    for _, row in df.iterrows():
        s, e, d = row
        s = lut[s]
        e = lut[e]
        mat[s, e] = d
        mat[e, s] = d

    return mat, lut

试运行:

>>> df = pd.DataFrame({
...     "Start": ["A", "A", "B"],
...     "End": ["B", "C", "C"],
...     "Distance": [1, 2, 3],
... })

>>> mat, lut = construct_dist_matrix(df)

>>> mat
array([[0., 1., 2.],
       [1., 0., 3.],
       [2., 3., 0.]])

>>> lut
{'A': 0, 'B': 1, 'C': 2}
相关问题