标签: pdist

关于pandas DataFrame的scipy pdist()

我有一个大型数据框(例如15k对象),其中每一行都是一个对象,列是数字对象的特征.它的形式如下:

df = pd.DataFrame({ 'A' : [0, 0, 1],
                    'B' : [2, 3, 4],
                    'C' : [5, 0, 1],
                    'D' : [1, 1, 0]},
                    columns= ['A','B', 'C', 'D'], index=['first', 'second', 'third'])
Run Code Online (Sandbox Code Playgroud)

我想计算所有对象(行)的成对距离,并且由于其计算效率,读取scipy的pdist()函数是一个很好的解决方案.我可以简单地打电话:

res = pdist(df, 'cityblock')
res
>> array([ 6.,  8.,  4.])
Run Code Online (Sandbox Code Playgroud)

并且看到res数组按以下顺序包含距离:[first-second, first-third, second-third].

我的问题是如何在矩阵,数据帧或(不太理想的)dict格式中得到它,所以我确切地知道每个距离值属于哪一对,如下所示:

       first second third
first    0      -     -
second   6      0     -
third    8      4     0
Run Code Online (Sandbox Code Playgroud)

最后,我认为将距离矩阵作为pandas DataFrame可能很方便,因为我可以对每行应用一些排序和排序操作(例如,找到最靠近对象的N个最近的对象first).

python scipy pandas pdist

6
推荐指数
1
解决办法
2337
查看次数

从一个点到所有其他点的距离总和

我有两个清单

available_points = [[2,3], [4,5], [1,2], [6,8], [5,9], [51,35]]

solution = [[3,5], [2,1]]

我想弹出一个点available_points,并追加solution用于从该点欧氏距离在总和,所有点solution是最大的.

所以,我会得到这个

solution = [[3,5], [2,1], [51,35]]


我能够选择这样的最初的2个最远点,但不知道如何继续.

import numpy as np
from scipy.spatial.distance import pdist, squareform

available_points = np.array([[2,3], [4,5], [1,2], [6,8], [5,9], [51,35]])

D = squareform(pdist(available_points)
I_row, I_col = np.unravel_index(np.argmax(D), D.shape)
solution = available_points[[I_row, I_col]]
Run Code Online (Sandbox Code Playgroud)

这给了我

solution = array([[1, 2], [51, 35]])

python numpy scipy euclidean-distance pdist

6
推荐指数
1
解决办法
452
查看次数

python numpy pairwise edit-distance

所以,我有一个numpy字符串数组,我想用这个函数计算每对元素之间的成对编辑距离:来自http://docs.scipy.org/doc/scipy的 scipy.spatial.distance.pdist -0.13.0 /参考/生成/ scipy.spatial.distance.pdist.html

我的数组样本如下:

 >>> d[0:10]
 array(['TTTTT', 'ATTTT', 'CTTTT', 'GTTTT', 'TATTT', 'AATTT', 'CATTT',
   'GATTT', 'TCTTT', 'ACTTT'], 
  dtype='|S5')
Run Code Online (Sandbox Code Playgroud)

但是,因为它没有'editdistance'选项,所以我想给出一个自定义的距离函数.我试过这个,我遇到了以下错误:

 >>> import editdist
 >>> import scipy
 >>> import scipy.spatial
 >>> scipy.spatial.distance.pdist(d[0:10], lambda u,v: editdist.distance(u,v))

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/epd-7.3.2/lib/python2.7/site-packages/scipy/spatial/distance.py", line 1150, in pdist
    [X] = _copy_arrays_if_base_present([_convert_to_double(X)])
  File "/usr/local/epd-7.3.2/lib/python2.7/site-packages/scipy/spatial/distance.py", line 153, in _convert_to_double
    X = np.double(X)
ValueError: could not convert string to float: TTTTT
Run Code Online (Sandbox Code Playgroud)

python lambda numpy scipy pdist

5
推荐指数
1
解决办法
2935
查看次数

在大型 numpy 三维数组上计算二维成对距离

我有一个包含 300 万个点的 numpy 数组,格式为[pt_id, x, y, z]. 目标是返回具有欧几里德距离两个数字min_d和 的所有点对max_d

欧几里得距离在x和之间,y而不是在 上z。但是,我想保留带有pt_id_from, pt_id_to,distance属性的数组。

我正在使用 scipy 的 dist 来计算距离:

import scipy.spatial.distance
coords_arr = np.array([['pt1', 2452130.000, 7278106.000, 25.000],
                       ['pt2', 2479539.000, 7287455.000, 4.900],
                       ['pt3', 2479626.000, 7287458.000, 10.000],
                       ['pt4', 2484097.000, 7292784.000, 8.800],
                       ['pt5', 2484106.000, 7293079.000, 7.300],
                       ['pt6', 2484095.000, 7292891.000, 11.100]])

dists = scipy.spatial.distance.pdist(coords_arr[:,1:3], 'euclidean')
np.savetxt('test.out', scipy.spatial.distance.squareform(dists), delimiter=',')
Run Code Online (Sandbox Code Playgroud)

我应该怎么做才能返回一个表单数组:[pt_id_from, pt_id_to, distance]

numpy scipy python-2.7 pdist

5
推荐指数
1
解决办法
1539
查看次数

MATLAB pdist函数

我使用pdist命令查找存储在矩阵中的x和y坐标之间的距离.

X = [100 100;
      0  100;
     100  0;
     500 400;
     300 600;];

D = pdist(X,'euclidean')
Run Code Online (Sandbox Code Playgroud)

返回15个元素向量.:

[0.734979755525412 3.40039811339820 2.93175207511321   1.83879677592575 2.40127440268306 2.75251513299386 2.21488402640753 1.10610649500317 1.81674017301699 0.903207751535635 1.99116952754924 1.05069952386082 1.24122819418333 1.08583377275532 1.38729428638035]
Run Code Online (Sandbox Code Playgroud)

有没有办法将这些距离与它们的坐标相关联,即将它们存储在具有一般行形式的矩阵中:

[Length xcoordinate1 ycoordinate1 xcoordinate2 ycoordinate2]
Run Code Online (Sandbox Code Playgroud)

找到每个长度的行?

提前致谢

matlab matrix pdist

4
推荐指数
2
解决办法
1万
查看次数

使用pdist的Python中的字符串距离矩阵

如何计算Python中字符串的Jaro Winkler距离矩阵?

我有大量手工输入的字符串(名称和记录号),我试图在列表中找到重复项,包括可能在拼写上有轻微变化的重复项.一到类似的问题的回答使用SciPy的的pdist功能与定制距离函数建议.我试图用Levenshtein包中的jaro_winkler函数实现这个解决方案.这个问题是jaro_winkler函数需要字符串输入,而pdict函数似乎需要2D数组输入.

例:

import numpy as np
from scipy.spatial.distance import pdist
from Levenshtein import jaro_winkler

fname = np.array(['Bob','Carl','Kristen','Calr', 'Doug']).reshape(-1,1)
dm = pdist(fname, jaro_winkler)
dm = squareform(dm)
Run Code Online (Sandbox Code Playgroud)

预期输出 - 这样的事情:

          Bob  Carl   Kristen  Calr  Doug
Bob       1.0   -        -       -     -
Carl      0.0   1.0      -       -     -
Kristen   0.0   0.46    1.0      -     -
Calr      0.0   0.93    0.46    1.0    -
Doug      0.53  0.0     0.0     0.0   1.0
Run Code Online (Sandbox Code Playgroud)

实际错误:

jaro_winkler expected two Strings or two Unicodes
Run Code Online (Sandbox Code Playgroud)

我假设这是因为jaro_winkler函数看到的是ndarray而不是字符串,我不知道如何在pdist函数的上下文中将函数输入转换为字符串.

有没有人建议允许这个工作?提前致谢!

python string jaro-winkler pdist

4
推荐指数
1
解决办法
2237
查看次数

到 (row,col,distance) 列表的距离的 Numpy 数组

我有一个 nd 数组,如下所示:

[[ 0.          1.73205081  6.40312424  7.21110255  2.44948974]
 [ 1.73205081  0.          5.09901951  5.91607978  1.        ]
 [ 6.40312424  5.09901951  0.          1.          4.35889894]
 [ 7.21110255  5.91607978  1.          0.          5.09901951]
 [ 2.44948974  1.          4.35889894  5.09901951  0.        ]]
Run Code Online (Sandbox Code Playgroud)

该数组中的每个元素都是一个距离,我需要将其转换为包含行、列、距离的列表,如下所示:

l = [(0,0,0),(0,1, 1.73205081),(0,2, 6.40312424),...,(1,0, 1.73205081),(1,1,0),...,(4,4,0)] 
Run Code Online (Sandbox Code Playgroud)

此外,删除对角线元素会很酷,而且元素 (j,i) 因为 (i,j) 已经存在。本质上,是否可以只取它的顶部三角矩阵?

这是否可以有效地完成(没有很多循环)?我用 squareform 创建了这个数组,但找不到任何文档来执行此操作。

python numpy scipy python-3.x pdist

0
推荐指数
1
解决办法
305
查看次数