【发布时间】:2019-11-06 01:36:27
【问题描述】:
我有一个大小约为 590000 * 590000 的巨大距离矩阵(每个元素的数据类型为 float16)。它是否适合用于聚类算法的内存?如果没有,谁能给出在聚类 DBSCAN 算法中使用它的想法?
【问题讨论】:
-
你为什么“拥有”这个矩阵,但不知道它的大小以及它是否适合内存?
标签: python-3.x memory-management dbscan
我有一个大小约为 590000 * 590000 的巨大距离矩阵(每个元素的数据类型为 float16)。它是否适合用于聚类算法的内存?如果没有,谁能给出在聚类 DBSCAN 算法中使用它的想法?
【问题讨论】:
标签: python-3.x memory-management dbscan
590000 * 590000 * 2 字节 (float16 大小) = 696.2 GB 内存
它不适合标准计算机的内存。此外,float16 被转换为 float32 以执行计算(请参阅Python numpy float16 datatype operations, and float8?),因此它可能使用超过 700GB 的 RAM。
为什么你有一个方阵?你不能使用 condensed matrix 吗?它将使用方阵所需内存的一半。
【讨论】:
【讨论】:
DBSCAN 只需要每个点的邻居。
因此,如果您知道适当的参数(我对此表示怀疑),您可以一次读取一行巨大的矩阵,并在您的距离阈值内构建一个邻居列表。假设只有不到 1% 是邻居(在如此庞大的数据上,您可能希望更低),这会将内存需求减少 100 倍。
但通常你想完全避免计算这样的矩阵!
【讨论】: