我的问题是关于使用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和所有其他的汉明距离。我该怎么办?
答案 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]
,则会收到错误。