我有两个大(稀疏)矩阵(500000 * 500000),并希望执行壁炉测试以获得相似性度量。
- 有没有办法将这些矩阵分解成更小的矩阵并进行测试?
- 或者你能建议一种有效地做到这一点而不会遇到内存问题的方法吗?
我有两个大(稀疏)矩阵(500000 * 500000),并希望执行壁炉测试以获得相似性度量。
您可以简单地抽取随机样本(即子矩阵)并估计 Mantel 检验统计量。有了足够的样本,这应该会收敛到相同的结论。通过这种方式,您可以避免编写访问所有数据的方法。
然而,由于这些是稀疏矩阵,最好采用一种通过坐标对象列表(COO 表示)访问数据的方法,即(行、列、值),并实现一个简单的计算来将两者之间的测试统计量制成表格矩阵。data.table您可以合并两个矩阵的 COO 版本或使用该包执行更复杂的制表。
最终,这取决于矩阵中存在多少值(即它们的密度)。如果它们非常稀疏,以稀疏矩阵格式攻击它们可能是最好的。如果它们不是超级稀疏,则使用子采样方法可能会更好。