【问题标题】:Convert a distance matrix to a list of pairwise distances in Python [closed]将距离矩阵转换为 Python 中的成对距离列表 [关闭]
【发布时间】:2021-06-08 21:46:44
【问题描述】:

假设python中的距离矩阵如下...

  0 1 2 3
0 0 1 4 8
1 1 0 3 7
2 4 3 0 3
3 8 7 3 0

我想将此距离矩阵转换为成对欧式距离列表,如下所示...

  Obj1  Obj2  Dist
0  0      1    1
1  0      2    4
2  0      3    8
3  1      2    3
4  1      3    7
5  2      3    3

我似乎找不到任何解决方案,但我是 python 新手,所以也许我只是不知道要搜索什么。任何帮助将不胜感激。

【问题讨论】:

  • 我会查看 NumPy 和 SciPy python 库:jbencook.com/pairwise-distance-in-numpy。如果您提供有关您的问题的更多详细信息,我可能会提供更多帮助。
  • 欢迎来到 SO。这不是讨论论坛或教程。请使用tour 并花时间阅读How to Ask 以及该页面上的其他链接。花一些时间与the Tutorial 练习示例。它会让你了解 Python 提供的工具来帮助你解决问题。

标签: python euclidean-distance distance-matrix


【解决方案1】:
distances = [
    [0, 1, 4, 8],
    [1 ,0, 3, 7],
    [4, 3, 0, 3],
    [8, 7, 3, 0],
]

MATRIX_SIZE = len(distances)
distance_pairs = []
for i in range(MATRIX_SIZE):
    for j in range(i):
        distance_pairs.append(("distance from {} to {} is {}".format(i, j, distances[i][j])))
print(distance_pairs)

【讨论】:

  • marke,这正是我想要的!感谢您的帮助。如果我的问题格式或结构不正确,我深表歉意,我会仔细查看教程。
【解决方案2】:

您可以使用 Pandas 和 DataFrame.stack()

import pandas as pd
import io

txt_dist_mat = '''  0 1 2 3
0 0 1 4 8
1 1 0 3 7
2 4 3 0 3
3 8 7 3 0'''

df = pd.read_fwf(io.StringIO(txt_dist_mat), index_col=0)

euc_mat = df.stack().reset_index().rename(columns={'level_0': 'Obj1', 'level_1': 'Obj2', 0: 'Dist'})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-11
    • 2019-12-01
    • 1970-01-01
    • 2011-08-08
    • 1970-01-01
    相关资源
    最近更新 更多