【问题标题】:Python - sparse vectors/distance calculationPython - 稀疏向量/距离计算
【发布时间】:2019-11-24 04:05:23
【问题描述】:

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

提前非常感谢!

【问题讨论】:

  • 对于稀疏距离,请参阅 scikit-learn 中的 pairwise_distances。使用 scipy.spatial.distance,你必须例如cdist(X.todense(), Y.todense(), metric=...)

标签: python vector scipy distance sparse-matrix


【解决方案1】:

您可以使用常规的 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])

【讨论】:

  • 好答案。我还要注意您可以使用 numpy 数组,这在其他情况下可能会有所帮助。
  • 我认为他的意思是缺少大多数元素的向量。它们可以表示为字典:{ 1:5, 2:4, 101:15 }。现在如何计算距离?
  • 感谢您的回答!这些 SciPy 稀疏矩阵是动态增长的,还是需要在初始化时提前给定一个固定大小(因为我事先不知道这些长度)?
  • 您可以动态调整其中 一些 的大小。例如,lil_matrix 实现了reshape 方法。
【解决方案2】:

在 numpy 中你可以这样做:

import numpy as np


a = np.array([1, 2, 3])
b = np.array([0, 0, 0])

c = np.sum(((a - b) ** 2)) # 14

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-15
    • 2016-04-26
    • 1970-01-01
    • 2014-03-07
    • 2011-07-30
    • 2016-04-02
    • 2015-01-29
    相关资源
    最近更新 更多