在Python中计算和使用欧式距离

问题描述 投票:1回答:1

我正在尝试计算python中两个数据集之间的欧式距离。我可以使用以下方法做到这一点:

np.linalg.norm(df-signal)

[dfsignal是我的两个数据集。这将返回单个数值(即8258155.579535276),这很好。我的问题是我希望它返回数据集中各列之间的差。像这样的东西:

AFNLWGT     4.867376e+10
AGI         3.769233e+09
EMCONTRB    1.202935e+07
FEDTAX      8.095078e+07
PTOTVAL     2.500056e+09
STATETAX    1.007451e+07
TAXINC      2.027124e+09
POTHVAL     1.158428e+08
INTVAL      1.606913e+07
PEARNVAL    2.038357e+09
FICA        1.080950e+07
WSALVAL     1.986075e+09
ERNVAL      1.905109e+09

我对Python还是很陌生,所以非常感谢任何可能的帮助。

python pandas numpy euclidean-distance
1个回答
1
投票

要使列标题具有列标准,可以将pandas.DataFrame.aggregatenp.linalg.norm一起使用:

import pandas as pd
import numpy as np

norms = (df-signal).aggregate(np.linalg.norm)

注意,默认情况下,.aggregate沿0轴(因此列)操作。

但是,这比numpy实现要慢得多:

norms = pd.Series(np.linalg.norm(df.to_numpy()-signal.to_numpy(), axis=0), index=df.columns)

使用大小为100x2的测试数据,后者要快20倍。

© www.soinside.com 2019 - 2024. All rights reserved.