在 Python 中使用随机点制作欧几里德距离矩阵
Posted
技术标签:
【中文标题】在 Python 中使用随机点制作欧几里德距离矩阵【英文标题】:Making an Euclidean Distance Matrix with Random Points in Python 【发布时间】:2022-01-05 16:35:11 【问题描述】:我编写了一个代码,它可以在坐标系中的某个宽度和长度范围内生成所需数量的点。如何计算并制表使用欧几里得方法生成的这些点的距离矩阵?
import random
npoints = int(input("Type the npoints:"))
width = float(input("Enter the Width you want:"))
height = float(input("Enter the Height you want:"))
sample = []
for _ in range(npoints):
sample.append((width * random.random(), height * random.random()))
print(*[f"(w:.2f, h:.2f)" for w, h in sample], sep=', ')
输出是:
Type the npoints:4
Enter the Width you want:10
Enter the Height you want:10
(8.52, 3.73), (9.69, 6.87), (8.20, 6.14), (4.18, 0.76)
Process finished with exit code 0
如何创建一个带有随机点的距离矩阵,如下例:
非常感谢您的帮助。
【问题讨论】:
您可以使用itertools.combinations(list_of_points, 2)
进行成对分组并将欧几里得距离应用于每一对。使用 numpy
可以更顺利地完成元素操作
【参考方案1】:
如果你想使用外部模块,scipy
对矩阵计算非常有效。
import random
import pandas as pd
from scipy.spatial import distance
npoints = int(input("Type the npoints:"))
width = float(input("Enter the Width you want:"))
height = float(input("Enter the Height you want:"))
sample = []
for _ in range(npoints):
sample.append((width * random.random(), height * random.random()))
print(*[f"(w:.2f, h:.2f)" for w, h in sample], sep=', ')
#Create a matrix from these points
mat_dist = distance.cdist(sample, sample, 'euclidean')
df_mat_dist = pd.DataFrame(mat_dist)
print(df_mat_dist)
输出
Type the npoints:4
Enter the Width you want:10
Enter the Height you want:10
(8.89, 8.85), (9.00, 9.43), (9.67, 9.45), (3.96, 5.68)
0 1 2 3
0 0.000000 0.584322 0.985072 5.856736
1 0.584322 0.000000 0.669935 6.277323
2 0.985072 0.669935 0.000000 6.839240
3 5.856736 6.277323 6.839240 0.000000
【讨论】:
谢谢你,伙计。这个解决方案的输出看起来很复杂。我想知道是否有可能通过从0开始并对每个点进行编号来获得像我添加到问题中的图像一样的输出? 是的,您可以将 Numpy 数组 (mat_dist
) 转换为 Pandas DataFrame (df_mat_dist
)。我编辑了我的答案;)。
谢谢兄弟。你像国王一样做这项工作:)
我的荣幸! :)
嘿兄弟,你可以看看这个问题吗?我已经研究了几个小时,但无法得出结论:***.com/questions/70152488/…以上是关于在 Python 中使用随机点制作欧几里德距离矩阵的主要内容,如果未能解决你的问题,请参考以下文章