使用Cytoscape.js在所有节点上执行中心性函数[英] Perform Centrality Functions on all Nodes using Cytoscape.js

本文是小编为大家收集整理的关于使用Cytoscape.js在所有节点上执行中心性函数的处理方法,想解了使用Cytoscape.js在所有节点上执行中心性函数的问题怎么解决?使用Cytoscape.js在所有节点上执行中心性函数问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我需要计算 gettle ,图表上每个节点的紧密和间隔中心性.目前,我正在使用cy.ready()事件之后的每个节点上的cytoscape.js内置的函数.但是,由于图形非常大(250个以上的节点,650多个连接),因此花费太长了.谁能建议一种更有效的方法?

var calculateSNA = function() {
  // Don't run if already set...
  if(data.sna) return false
  console.log('Running SNA')

  _.map(nodes, function(node) {
    var target = cy.nodes('#' + node.data.id)
    node.data.sna  = {
      degreeCentrality: cy.$().dc({ root: target }).degree,
      closenessCentrality: cy.$().cc({ root: target }),
      betweennessCentrality: cy.$().bc().betweenness(target)
    }
    return node
  })

  // Add SNA data to local storage
  Data.add({
    sna: true
  })
  Node.set(nodes)

  console.log('SNA complete')
}


cy.ready(function(event) {
  console.log('cy.ready()')
  calculateSNA()
})

推荐答案

运行一次算法,而不是运行n次.然后查询结果:

let ccn = cy.elements().closenessCentralityNormalized({ /* my options */ });

cy.nodes().forEach( n => {
  n.data({
    ccn: ccn.closeness( n )
  });
} );

除非有充分的理由去做,否则使用正常版的中心算法.如果将一个图中的结果与另一个图中的结果进行比较,则只有归一化版本真正意味着任何内容.

.

本文地址:https://www.itbaoku.cn/post/1793852.html