ELKI依赖于double
表示数字。如果您需要更高的精度,则必须实现自己的解析器和输出模块(虽然这很容易,因为我们有一个高度模块化的架构)。
文本的默认输出序列化由 Java 处理。因此,精度是您默认从 Java 获得的。这应该是 15-16 位的精度,如果您使用的是 ,则应该是DoubleVector
7-8 位,如果您使用的是FloatVector
.
使用 groovysh 快速检查:
new DoubleVector([12345.678901234567890, 3456.109453] as double[]);
===> 12345.678901234567 3456.109453
new FloatVector([12345.678901234567890, 3456.109453] as float[]);
===> 12345.679 3456.1094
只产生预期的损失double
和float
精度。
获取行标签的最佳方法是……将行标签添加到您的数据中。
写。评论中的附加问题:默认解析器会将文件开头的文本行视为列标签。所以只需将“X Y”放入文件的第一行。
因此,一个合理的输入格式将是:
X Y Label
1 2 Point7
3 4 "Point 8"
以下是不太好的想法:
5 6 123shouldwork
7 8 don't do this: 3 parser will retain the 3
label 应该是非数字的,以便解析器自动将其视为标签。否则,您必须设置适当的参数。
DBID 用于内部处理。也许我们根本不应该将它们写入输出。FixedDBIDFilter
是一种骇人听闻的解决方法;它旨在用于在使用需要基于 id 的哈希算法并在 MiniGUI 中进行多次运行时获得可重现的哈希值。因为在多次运行时,DBID 将被不断枚举。