gpt4 book ai didi

python - 计算scipy csr矩阵中的欧氏距离

转载 作者:太空狗 更新时间:2023-10-30 02:28:31 24 4
gpt4 key购买 nike

我需要计算存储在 csr 稀疏矩阵中的所有点与一些点列表之间的欧氏距离。将 csr 转换为密集的对我来说会更容易,但由于内存不足我不能,所以我需要将其保留为 csr。

例如,我有这个 data_csr 稀疏矩阵(同时查看 csr 和 dense):

data_csr
(0, 2) 4
(1, 0) 1
(1, 4) 2
(2, 0) 2
(2, 3) 1
(3, 5) 1
(4, 0) 4
(4, 2) 3
(4, 3) 2

data_csr.todense()
[[0, 0, 4, 0, 0, 0]
[1, 0, 0, 0, 2, 0]
[2, 0, 0, 1, 0, 0]
[0, 0, 0, 0, 0, 1]
[4, 0, 3, 2, 0, 0]]

和这个中心点列表:

center
array([[0, 1, 2, 2, 4, 1],
[3, 4, 1, 2, 4, 0]])

使用scipy.spatial 包,data_csrcenter 之间的欧几里得距离数组将如下所示。因此,在 center 的每一行中,总共 6 个点中的每个点都是针对 data_csr 中的所有行计算的。结果数组 (2,5) 的第一行是 center 的第一行和 data_csr 中的所有行之间的 ED。

scipy.spatial.distance.cdist(center, data_csr, 'euclidean')

array([[ 5.09901951, 3.87298335, 5.19615242, 5. , 5.91607978],
[ 7.34846923, 5.38516481, 5.91607978, 6.8556546 , 6.08276253]])


到目前为止,我所学到的可以通过以下方式获得非零值和索引:

data_csr.data
array([4, 1, 2, 2, 1, 1, 4, 3, 2])

data_csr.indices
array([2, 0, 4, 0, 3, 5, 0, 2, 3])

但我仍然不知道如何计算这两个对象之间的 ED。

最佳答案

稀疏矩阵上的成对欧氏距离在 sklearn 中实现(正如 hpaulj 所指出的,scipy 实现不适用于稀疏矩阵)。

hpaulj 示例:

import scipy.sparse
import sklearn.metrics.pairwise
data = [4,1,2,2,1,1,4,3,2]
col = [0,1,1,2,2,3,4,4,4]
row = [2,0,4,0,3,5,0,2,3]
M = scipy.sparse.csr_matrix((data,(col,row)))
distances = sklearn.metrics.pairwise.pairwise_distances(M,M)

文档:http://scikit-learn.org/stable/modules/generated/sklearn.metrics.pairwise.pairwise_distances.html

关于python - 计算scipy csr矩阵中的欧氏距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36557472/

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