Python - 稀疏向量/距离计算
我想在Python中使用动态增长的向量,因为我事先不知道它们的长度。此外,我还想计算这些稀疏向量之间的距离,最好是用scipy.spatial.distance里的距离函数(不过其他建议也可以)。有没有什么好主意?(一开始不需要太高效。)
非常感谢!
2 个回答
0
下面是你可以在numpy中实现的方法:
import numpy as np
a = np.array([1, 2, 3])
b = np.array([0, 0, 0])
c = np.sum(((a - b) ** 2)) # 14
5
你可以使用普通的 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
有很多种稀疏矩阵,某些是基于字典的(见评论)。你可以像这样从一个列表定义一个行稀疏矩阵:
scipy.sparse.csr_matrix([1,2,3])