2012-01-02 60 views
0

我正在寻找Python中动态增长的向量,因为我不知道它们的长度。此外,我想计算这些稀疏向量之间的距离,最好使用scipy.spatial.distance中的距离函数(尽管欢迎任何其他建议)。任何想法如何做到这一点? (最初,它不需要高效。)Python - 稀疏向量/距离计算

非常感谢!

+1

对于稀疏的距离,见[pairwise_distances(http://scikit-learn.sourceforge.net/dev/modules/generated/sklearn.metrics。 pairwise.pairwise_distances.html)在scikit学习。随着scipy.spatial.distance,你必须例如cdist(X.todense(),Y.todense(),metric = ...) – denis 2012-01-03 16:37:08

回答

4

您可以使用常规python列表(这是动态的)作为向量。简单的例子如下。

from scipy.spatial.distance import sqeuclidean 
a = [1,2,3] 
b = [0,0,0] 
print sqeuclidean(a,b) # 14 

按aganders3的建议,也请注意,您还可以根据需要使用numpy的数组:

import numpy 
a = numpy.array([1,2,3]) 

如果你的问题的稀疏的部分是我会使用SciPy的为关键 - 它支持稀疏矩阵。您可以定义1xn矩阵并将其用作矢量。此作品(该参数是矩阵的大小,默认情况下以零填充):

sqeuclidean(scipy.sparse.coo_matrix((1,3)),scipy.sparse.coo_matrix((1,3))) # 0 

有稀疏矩阵many kinds,根据一些字典(见注释)。您可以从像这样的列表定义一个排稀疏矩阵:

scipy.sparse.csr_matrix([1,2,3]) 
+0

很好的答案。我也注意到你可以使用numpy数组,这在其他情况下可能是有益的。 – aganders3 2012-01-02 21:35:10

+0

我认为他意味着大部分元素缺失的向量。它们可以表示为词典:{1:5,2:4,101:15}。现在你如何计算距离? – ugoren 2012-01-02 21:42:32

+0

@ugoren:我刚刚编辑了我的答案。 – 2012-01-02 21:46:50