【发布时间】:2014-04-16 01:53:08
【问题描述】:
我一直在想它,但已经没有想法了。我有 10 个长度为 18 的数组,其中有 18 个双精度值。这 18 个值是图像的特征。现在我必须对它们应用 k-means 聚类。
为了实现 k-means 聚类,我需要为每个数组设置一个唯一的计算值。是否有任何数学或统计或任何逻辑可以帮助我为每个数组创建一个计算值,根据其中的值对它来说是独一无二的。提前致谢。
这是我的数组示例。还有10个
[0.07518284315321135
0.002987851573676068
0.002963866526639678
0.002526139418225552
0.07444872939213325
0.0037219653347541617
0.0036979802877177715
0.0017920256571474585
0.07499695903867931
0.003477831820276616
0.003477831820276616
0.002036159171625004
0.07383539747505984
0.004311312204791184
0.0043352972518275745
0.0011786937400740452
0.07353130134299131
0.004339580295941216]
【问题讨论】:
-
@Octopus 检查,它适用于单个值,我有 10 个这样的数组,我必须用于集群。 1 个数组 = 单个图像特征。简而言之,我必须创建类似图像的集群
-
第一种方法可以基于
Arrays.hashCode(doubleArray)。这对于数组来说不是唯一的,但是......无论如何,没有比 18 个双精度值本身小得多的 18 个双精度值的唯一表示。对于 10 个数组,两个数组具有相同 hashCode 值的可能性应该已经非常非常低,并且可以手动验证和处理。但这一切可能对您没有多大帮助:如果您打算对这些“ID”进行聚类,那么这些 ID 必须保持相似性 - 这是正确的吗? -
@Marco13 是的,我打算保留那个唯一计算值的相似性。哈希码会保留它们吗?我现在只拍了 10 张图片,数据库将包含数千张图片
-
开发一种算法,将这些数字转换为基数 18 或基数 36 或基数 72(或更多)
char表示。它是否需要是数字,如果是,为什么?如上所述,您不能仅使用 10 (0-9) 个整数位和长度更小的双精度数来唯一地表示这些双精度数('Real')。但是当我看到你的数据集时,你可以安全地从你的实数中删除第一个 0 、点和后面的 0 ,并将它们表示为整数,但在将它们转换为整数表示时注意前导零.