【问题标题】:create distance matrix using own calculation pandas使用自己的计算熊猫创建距离矩阵
【发布时间】:2019-08-31 00:32:51
【问题描述】:

我有一个由 >50 个维度组成的数据框。

使用欧式距离,我可以计算距离矩阵:

import pandas as pd
df2=pd.DataFrame({'col1':[1,2,3,4],'col2':[5,6,7,8]})
df2
from scipy.spatial import distance_matrix
dm=pd.DataFrame(distance_matrix(df2.values, df2.values), index=df2.index, columns=df2.index)
dm

我想把重点放在col1上,所以想用公式:

sqrt(w1(x1-x2)^2 + w2(y1-y2)^2), w1=0.7, w2=0.3

通读文档,我找不到实现此更改的方法。我对 python 还是比较陌生,所以想知道如何使用 pandas 来实现它

这可以创建吗?

【问题讨论】:

  • 你对你写的距离公式有多大把握?一个明显的问题是,在正常计算中,您的权重加起来为 2,但在此示例中,您的权重加起来仅为 1。因此,即使 x1-x2 和 y1-y2 具有相同的距离,您的公式也会产生完全不同的答案比未加权的情况。
  • 大多数参考资料说这是计算加权距离矩阵的最佳方法,请参阅math.stackexchange.com/questions/917066/…

标签: pandas


【解决方案1】:

您可以使用pdist 并提供您自己的指标公式:

w = (0.7, 0.3)
pd.DataFrame(squareform(pdist(df2.values, lambda u, v: np.sqrt((w*(u-v)**2).sum()))), index=df2.index, columns=df2.index)

【讨论】:

  • 如何添加特定测试。 IE。 (np.where(u[3]==v[3],0,10).
  • 不确定您的意思:在示例中 u 和 v 的长度为 2。
  • 如果我要添加更多列,以便在计算之前检查它们是否相同。假设我有 col3 分类,并且想要计算它们不同时的距离,即 col3 = ['a','a','b','c'],我将包括测试 u[3]!=v [3],如果是,则做一个 const 值,比如用 np.where(u[3]!=v[3],10,0)
  • 你为什么不说你提出了一个新问题——现在更清楚了。见我的answer there
猜你喜欢
  • 2018-08-05
  • 1970-01-01
  • 2017-04-13
  • 1970-01-01
  • 2015-06-11
  • 1970-01-01
  • 2018-11-09
  • 1970-01-01
相关资源
最近更新 更多