我需要计算存储在csr稀疏矩阵和一些点列表中的所有点之间的欧几里得距离。将csr转换为密集矩阵会更容易,但由于内存不足,我无法这样做,因此需要保持其为csr。
例如,我有这个data_csr稀疏矩阵(在csr和dense视图中查看):
使用
但是我仍然无法算出这两个对象之间的编辑距离。
例如,我有这个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_csr 和 center 之间的欧几里得距离数组如下所示。因此,center 的每一行中的总共 6 个点会与 data_csr 的所有行进行计算。结果数组的第一行(2,5)是第一行 center 与 data_csr 的所有行之间的欧氏距离。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])
但是我仍然无法算出这两个对象之间的编辑距离。
scipy.spatial.distance.cdist(center, data_csr, 'euclidean')
。 - Rochana Nana