【发布时间】:2012-03-07 15:23:51
【问题描述】:
目前我正在处理大量用于计算的浮点/双精度数据集。我有一组文件来比较数据 A 和数据 B,我想计算欧几里德距离/余弦相似度。 IE。数据 A 点 1 迭代数据 B 点以找到最近的邻居。
数据以文本文件的形式提供 - 没有问题。存储/读取信息的理想方式是什么?
我必须对数据 A 中的所有点重复数据 B。数据将存储为浮点数。每个数据点可能有维度。一个文件最多可以包含大约 200 万个浮点数。
我应该继续使用吗:
- 不断读取Data B的文件并解析字符串(感觉这样效率极低)
- 将数据存储在列表中(浮点数组)
- 使用内存映射 IO?
- HashMap(我对HashMap比较陌生,他们说集合的位置可能会随着时间的推移而改变,如果我只是在没有修改的情况下迭代,位置会改变吗?)
【问题讨论】:
-
我不明白为什么简单的
float[][]数组在这里不起作用。 -
你的数学似乎比我好,所以如果你将浮点数存储在一个数组中,试着估计所需的内存:一个浮点数是 4 个字节,你有 200 万个。这产生了 800 万字节:8 MB。花生储存在记忆中。即使数据结构更需要内存,并且将每个浮点数所需的内存乘以 10,它仍然只有 80 MB。还是花生。
-
哦,我忘了添加数据集中的点可能会丢失,从而使数据集不完整。因此,我要么必须 1) 扫描文件以找到最大尺寸和类别 2) 使用列表。实际上,您认为哪个开销更小,在创建确认和定义的二维数组之前扫描文件一次或使用列表?
标签: java dataset large-data-volumes