某些特定索引是否特定使用了scipy的pdist函数?

时间:2016-08-17 11:22:05

标签: python scipy pdist

我的问题是关于使用scipy.spatial.distance的pdist函数。虽然我必须计算1x64矢量与存储在2D阵列中的其他数百万个1x64矢量中的每一个之间的汉明距离,但我不能用pdist来完成。因为它返回同一2D数组内任意两个向量之间的汉明距离。我想知道是否有任何方法可以计算特定指数与海明之间的距离。矢量和其他所有。

这是我当前的代码,我现在使用1000x64,因为内存错误显示为大数组。

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


ph = np.load('little.npy')

print pdist(ph, 'hamming').shape

,输出

(499500,)

little.npy有一个1000x64的数组。例如,如果我只想看到31. vector和所有其他的汉明距离。我该怎么办?

1 个答案:

答案 0 :(得分:1)

您可以使用cdist。例如,

In [101]: from scipy.spatial.distance import cdist

In [102]: x
Out[102]: 
array([[0, 1, 1, 1, 1, 0, 0, 0],
       [0, 0, 1, 0, 0, 0, 1, 0],
       [0, 0, 0, 1, 1, 1, 0, 0],
       [1, 0, 1, 1, 0, 1, 1, 0],
       [1, 0, 1, 1, 0, 1, 1, 1],
       [0, 1, 0, 1, 0, 0, 0, 1],
       [1, 0, 0, 0, 0, 1, 0, 0],
       [1, 1, 1, 1, 1, 1, 1, 1],
       [1, 1, 0, 0, 1, 1, 1, 0],
       [1, 0, 0, 1, 1, 0, 0, 1]])

In [103]: index = 3

In [104]: cdist(x[index:index+1], x, 'hamming')
Out[104]: 
array([[ 0.625,  0.375,  0.5  ,  0.   ,  0.125,  0.75 ,  0.375,  0.375,
         0.5  ,  0.625]])

它给出索引3处的行与所有其他行(包括索引3处的行)之间的汉明距离。 结果是一个2D阵列,只有一行。您可能希望立即拉出该行,结果是1D:

In [105]: cdist(x[index:index+1], x, 'hamming')[0]
Out[105]: 
array([ 0.625,  0.375,  0.5  ,  0.   ,  0.125,  0.75 ,  0.375,  0.375,
        0.5  ,  0.625])

我使用x[index:index+1]而不是x[index],因此输入是一个2D数组(只有一行):

In [106]: x[index:index+1]
Out[106]: array([[1, 0, 1, 1, 0, 1, 1, 0]])

如果您使用x[index],则会收到错误。