【发布时间】:2016-08-02 03:11:55
【问题描述】:
我需要计算存储在 csr 稀疏矩阵和一些点列表中的所有点之间的欧几里得距离。将 csr 转换为密集的 csr 对我来说会更容易,但由于内存不足,我不能,所以我需要将其保留为 csr。
例如,我有这个 data_csr 稀疏矩阵(同时查看 csr 和密集):
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点列表:
center
array([[0, 1, 2, 2, 4, 1],
[3, 4, 1, 2, 4, 0]])
使用scipy.spatial 包,data_csr 和 center 之间的欧几里德距离数组将如下所示。因此,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。
【问题讨论】:
-
如何计算data_csr和center之间的ED(假设dense)?
-
@Alexander 我已经编辑过了,我用的是
scipy.spatial.distance.cdist(center, data_csr, 'euclidean') -
我仍然无法复制您的结果来计算上述距离。有关如何从矩阵中提取数据的信息,请参阅这篇文章,这是我所掌握的。 stackoverflow.com/questions/36587702/…
标签: python sparse-matrix euclidean-distance