问题: 我有一个大约为 [350000, 1] 的向量,我希望计算成对距离。这导致 [350000, 350000] 整数数据类型的矩阵不适合 RAM。我最终想得到一个布尔值(适合 RAM),所以我目前一次只做一个元素,但这不是很节省时间。
编辑:由于数据的大小,标准 sklearn 和 scipy 函数不起作用 - 但如果我可以以某种方式将其分块以使用硬盘,那么我应该能够使用这些。
问题可视化: [a_1, a_2, a_3]^t -> [[a_1 - a_1, a_1 - a_2, a_1 - a_3], [a_2 - a_1, a_2 - a_2, a_2 - a_3], [a_3 - a_1, a_3 - a_2, a_3 - a_3]]
请注意,取绝对值时,只需要计算上三角形,因为它是对称的。
需要分块或替代解决方案的矢量化代码: 我找到了一种方法来计算使用广播在小矩阵上工作的所有点之间的距离(减法),但需要一种方法来在不达到 RAM 限制的情况下在更大的矩阵上执行此操作。
或者也许可以建议更好的方法来更快地访问下面的 MWE?
distMatrix = np.absolute((points[np.newaxis, :, :] - points[:, np.newaxis, :])[:, :, 0])
Run Code Online (Sandbox Code Playgroud)
其他尝试: 我尝试使用 dask 和 memmap 但仍然出现内存错误,所以一定是做错了什么。我也尝试过 memmap 并手动对数据进行分块,但没有获得完整的结果集,因此非常感谢任何帮助。
当前方法的 MWE:
## Data ## …Run Code Online (Sandbox Code Playgroud)