本文介绍了如何计算向量集合之间的成对欧几里得距离的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个这样的 pandas 数据框。其中索引为pd.DatetimeIndex,列为时间序列。
x_1 | x_2 | x_3 | |
---|---|---|---|
2020-08-17 | 133.23 | 2457.45 | -4676 |
2020-08-18 | -982 | -6354.56 | -245.657 |
2020-08-19 | 5678.642 | 245.2786 | 2461.785 |
2020-08-20 | -2394 | 154.34 | -735.653 |
2020-08-20 | 236 | -8876 | -698.245 |
我需要计算所有柱彼此之间的欧几里得距离。即(x_1-x_2)、(x_1-x_3)、(x_2-x_3),并返回如下正方形数据帧: (请注意,此表中的值只是一个示例,不是欧几里德距离的实际结果)
x_1 | x_2 | x_3 | |
---|---|---|---|
x_1 | 0 | 123 | 456 |
x_2 | 123 | 0 | 789 |
x_3 | 456 | 789 | 0 |
我尝试了this资源,但我不知道如何传递我的df的列。如果理解正确,该示例将行作为序列传递,以计算ED。
推荐答案
实现这一点的明确方法是:
from itertools import combinations
import numpy as np
dist_df = pd.DataFrame(index=df.columns, columns=df.columns)
for col_a, col_b in combinations(df.columns, 2):
dist = np.linalg.norm(df[col_a] - df[col_b])
dist_df.loc[col_a, col_b] = dist
dist_df.loc[col_b, col_a] = dist
print(dist_df)
输出
x_1 x_2 x_3
x_1 NaN 12381.858429 6135.306973
x_2 12381.858429 NaN 12680.121047
x_3 6135.306973 12680.121047 NaN
如果希望0
而不是NaN
使用DataFrame.fillna
:
dist_df.fillna(0, inplace=True)
这篇关于如何计算向量集合之间的成对欧几里得距离的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!