首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用数域和范畴混合计算距离矩阵

用数域和范畴混合计算距离矩阵
EN

Stack Overflow用户
提问于 2019-09-10 09:58:09
回答 1查看 798关注 0票数 0

我有一个包含数字(15个字段)和分类(5个字段)数据的数据框架。

我可以在create distance matrix using own calculation pandas之后创建数字字段的完整距离矩阵

我也想包括分类字段。

用作模板:

代码语言:javascript
复制
import scipy
from scipy.spatial import distance_matrix
from scipy.spatial.distance import squareform
from scipy.spatial.distance import pdist
df2=pd.DataFrame({'col1':[1,2,3,4],'col2':[5,6,7,8],'col3':['cat','cat','dog','bird']})
df2
pd.DataFrame(squareform(pdist(df2.values, lambda u, v: np.sqrt((w*(u-v)**2).sum()))), index=df2.index, columns=df2.index)

在正方形计算中,我想包括测试np.where(u[2]==v[2], 0, 10) (以及其他分类列)。

我是否也修改了lambda函数来执行这个测试?

这里,0,1之间的距离

代码语言:javascript
复制
= sqrt((2-1)^2 + (6-5)^2 + (cat - cat)^2)
= sqrt(1 + 1 + 0)

以及0,2之间的距离

代码语言:javascript
复制
= sqrt((3-1)^2 + (7-5)^2 + (dog - cat)^2)
= sqrt(4 + 4 + 100)

等。

有人能建议我如何实现这个算法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-10 15:31:13

代码语言:javascript
复制
import pandas as pd
import numpy as np
from scipy.spatial.distance import pdist, squareform

df2 = pd.DataFrame({'col1':[1,2,3,4],'col2':[5,6,7,8],'col3':['cat','cat','dog','bird']})

def fun(u,v):
    const = 0 if u[2] == v[2] else 10
    return np.sqrt((u[0]-v[0])**2 + (u[1]-v[1])**2 + const**2)

pd.DataFrame(squareform(pdist(df2.values, fun)), index=df2.index, columns=df2.index)

结果:

代码语言:javascript
复制
           0          1          2          3
0   0.000000   1.414214  10.392305  10.862780
1   1.414214   0.000000  10.099505  10.392305
2  10.392305  10.099505   0.000000  10.099505
3  10.862780  10.392305  10.099505   0.000000
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57868339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档