繁体   English   中英

使用自定义排序 function 对 Javascript 中的对象进行聚类

[英]clustering Objects in Javascript using a custom sort function

我在 Javascript 中有对象,我想根据它们之间的距离对它们进行聚类来排序。 我在 Java 中执行了相同的分析,其中我结合了自定义距离 function 和层次聚类。

但是,我找不到任何允许您定义自定义距离度量的好的 Javascript 替代品。 我试图实现一个标准的 Arrays.sort function,但是在确定了对象之间的距离之后,我有点卡在比较 function 上。

通常,排序比较器类似于:

function comparefunction(a, b) {
  if (a.nr > b.nr) return 1;
  if (a.nr < b.nr) return -1;
  return 0;
}

但是现在我根据它们之间的重叠得到了 a 和 b 之间的距离

function comparefunction(clusterA, clusterB) {
  let overlap = 0.0;
  if (relativeOverlapBetweenClusters.has(clusterA)) {
    const relativeOverlapForClusterA = relativeOverlapBetweenClusters.get(clusterA);
    if (relativeOverlapForClusterA.has(clusterB)) {
      overlap = relativeOverlapForClusterA.get(clusterB);
    }
  }
  return 1 - overlap;
}

但它没有正确排序。 另外,我看到 compareFunction 只被调用了有限的次数。

我实施了一个旅行推销员问题,它似乎工作得很好。 需要稍微调整一下距离。 这是一些示例代码:

https://codesandbox.io/s/musing-davinci-i3tss?file=/src/index.js

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM