【问题标题】:Igraph eigenvector centrality Run-Time error c++Igraph特征向量中心性运行时错误c ++
【发布时间】:2015-03-21 17:07:34
【问题描述】:

我正在用 c++ 编写程序,该程序需要生成图表并计算一些度量值。我正在使用 Visual Studio 2013 和 Igraph C 库。在这一点上,我可以从自定义信息创建图表并计算一些指标,如中介和接近中心性,但是当我尝试计算特征向量中心性时,程序崩溃并向我显示以下消息:

“运行时检查失败 #3 - 正在使用变量 'tgetv0' 而未初始化。”

tgetv0 变量在来自 Igraph 源的 dgetv.c 内部使用。 这是我的代码:

void GraphObject::calcEigen()
{
igraph_arpack_options_t options;
igraph_real_t value;
igraph_vector_t weights;
igraph_vector_init(&weights, igraph_ecount(&cGraph));  //cGraph is already created.
igraph_vector_init(&eigenRes, igraph_vcount(&cGraph));  //All ..Res igraph_vector_t are declarated in header
igraph_vector_init(&betweennesRes, 0);
igraph_vector_init(&closenessRes, 0);
igraph_arpack_options_init(&options);

igraph_betweenness(&cGraph, &betweennesRes, igraph_vss_all(), 0, 0, 1);
igraph_closeness(&cGraph, &closenessRes, igraph_vss_all(), IGRAPH_ALL, 0, 1);
igraph_eigenvector_centrality(&cGraph, &eigenRes, &value, 0, 1, &weights, &options);
}

closeness 和 betwenness 被正确计算为“计算”但在特征向量函数上崩溃。

在对文档、互联网和调试器进行大量研究之后,我无法确定问题出在哪里,尤其是当我尝试了文档 http://igraph.org/c/doc/igraph-Structural.html#igraph_eigenvector_centrality(复制/粘贴)中的示例代码并进行了相同操作时。这是图书馆还是示例问题,我错过了什么?

当我初始化权重向量然后调用 igraph_null(&weights) 时,它可以工作,但所有特征值的结果都是 1,这是不正确的结果。我做错了什么?

【问题讨论】:

  • 我很确定这与weights 变量的初始化有关。你的图表有权重吗?如果不是,请不要使用 weights 参数进行 igraph_eigenvector_centrality 调用,只需在此处传递一个空指针即可。如果您的图表确实有权重,请先填充 weights 向量 - 现在它仅包含未初始化的值。
  • 感谢塔马斯的回复。我认为这是问题所在,但我尝试传递一个空指针并仍然这样做。图表没有权重,我尝试用 igraph_vector_fill(&weights, 10) 填充权重向量,但什么也没有......退一步我的研究我记得 Msvc 构建有一个 IGRAPH_SUPPORT 定义的错误(通过添加 /DPRPACK_IGRAPH_SUPPORT= 解决1 在命令行上)。这个错误可能是问题的原因吗?
  • 不,PRPACK 与特征向量中心性无关。我在下面添加一个可能的答案。

标签: c++ visual-studio visual-c++ igraph


【解决方案1】:

让我们假设 Visual Studio 是正确的,并且我们确实有一个名为 tgetv0 的变量正在使用未初始化。我扫描了 igraph 的源代码,看起来确实有两个地方可能是这种情况。其中一个在src/lapack/dnaupd.c,另一个在src/lapack/dsaupd.c。这两个文件都是使用f2c 从 Fortran 转换而来的,因此很难判断该问题是否存在于原始 Fortran 代码中,或者是否是在转换过程中引入的。无论哪种方式,您都可以通过查找在 src/lapack/dnaupd.csrc/lapack/dsaupd.c 中声明 tgetv0 的行并将其初始化为值 0 来轻松解决此问题。在我的版本中,要更改的行是 @ 中的第 486 行987654328@ 和src/lapack/dsaupd.c 中的第 482 行。

请添加评论以确认该解决方案是否适合您 - 如果有效,我将向 igraph 源代码树提交补丁。

【讨论】:

  • 它不起作用,弹出同样的错误......我会继续调查。谢谢
  • igraph_pagerank() 函数仅适用于 IGRAPH_PAGERANK_ALGO_PRPACK 模式,ARPACK 模式再次出现运行时错误,不推荐使用 IGRAPH_PAGERANK_ALGO_POWER。我可以看到的另一件事是 igraph_sparsemat_init() 函数会生成一个未解决的外部,即使在 de igraph-0.7.1-msvc/debug 路径中​​包含 sparsemat.obj。
猜你喜欢
  • 2021-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多