【发布时间】:2015-01-29 21:25:02
【问题描述】:
我有一个相对较大的 NumPy 数组(近 300k 行和 20 多列,尽管大多数值为 0),我需要使用 scikit-learn 的 pairwise_distances 函数为其计算距离矩阵。
不幸的是,除非我将输入数组转换为稀疏矩阵,否则此过程会出现内存错误。 SciPy 提供了许多sparse matrix classes,我不知道哪一个最适合这种特殊情况。
我找到了一个支持 CSR 或 CSC 的 SO answer,但我不清楚哪个最适合计算距离矩阵。欢迎提出任何建议!
【问题讨论】:
-
距离矩阵不是稀疏的。好吧,我想如果你有很多重复点,它可能是稀疏的,但这种情况很少发生。
-
输入数组,而不是距离矩阵,是我要转换为稀疏矩阵的数组。
-
啊,我明白了。但即便如此,得到的距离矩阵将有
n选择 2 个条目,这(对于n=300,000)肯定不适合内存。因此,我认为将输入数组转换为稀疏数组并没有多大帮助。 -
如果你想计算成对距离上的统计数据,将整个数组保存在内存中可能没有意义。你用这个矩阵做什么?
-
距离矩阵将作为 scikit-learn 的
silhouette_score函数的输入,该函数评估聚类解决方案。我预先计算了距离矩阵,因为pairwise_distances可以并行化,而在后台计算距离矩阵的silhouette_score不能。
标签: python scipy scikit-learn distance sparse-matrix