gpt4 book ai didi

python - 具有稀疏矩阵的 scipy cdist

转载 作者:太空狗 更新时间:2023-10-30 02:56:20 32 4
gpt4 key购买 nike

我需要计算两组向量 source_matrixtarget_matrix 之间的距离。

source_matrixtarget_matrix 都属于 scipy.sparse.csr.csr_matrix 类型时,我有以下行:

distances = sp.spatial.distance.cdist(source_matrix, target_matrix)

我最终得到以下部分异常回溯:

 File "/usr/local/lib/python2.7/site-packages/scipy/spatial/distance.py", line 2060, in cdist
[XA] = _copy_arrays_if_base_present([_convert_to_double(XA)])
File "/usr/local/lib/python2.7/site-packages/scipy/spatial/distance.py", line 146, in _convert_to_double
X = X.astype(np.double)
ValueError: setting an array element with a sequence.

这似乎表明稀疏矩阵被视为密集的 numpy 矩阵,这既失败又错过了使用稀疏矩阵的要点。

有什么建议吗?

最佳答案

我很欣赏这篇文章已经很老了,但是正如其中一条评论所建议的那样,您可以使用 sklearn implementation它接受稀疏向量和矩阵。

以两个随机向量为例

a = scipy.sparse.rand(m=1,n=100,density=0.2,format='csr')
b = scipy.sparse.rand(m=1,n=100,density=0.2,format='csr')
sklearn.metrics.pairwise.pairwise_distances(X=a, Y=b, metric='euclidean')
>>> array([[ 3.14837228]]) # example output

或者即使 a 是一个矩阵而 b 是一个向量:

a = scipy.sparse.rand(m=500,n=100,density=0.2,format='csr')
b = scipy.sparse.rand(m=1,n=100,density=0.2,format='csr')
sklearn.metrics.pairwise.pairwise_distances(X=a, Y=b, metric='euclidean')
>>> array([[ 2.9864606 ], # example output
[ 3.33862248],
[ 3.45803465],
[ 3.15453179],
...

Scipy spatial.distance 不支持稀疏矩阵,因此 sklearn 是这里的最佳选择。您还可以将 n_jobs 参数传递给 sklearn.metrics.pairwise.pairwise_distances,如果您的向量非常大,它会分配计算。

希望对你有帮助

关于python - 具有稀疏矩阵的 scipy cdist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39843557/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com