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

问题描述 投票:0回答:2

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

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

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

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

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

谢谢!

python distance-matrix
2个回答
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}

0
投票

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

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]]
© www.soinside.com 2019 - 2024. All rights reserved.