【发布时间】:2019-09-06 11:03:04
【问题描述】:
我在一些处理矩阵的 (Rcpp) 代码中使用 Armadillo 对象。
矩阵是邻接矩阵,我需要快速计算底层网络的组件,尽管我可以通过 igraph 来完成。
但是我已经无法将邻接矩阵转换为可以与igraph 一起使用的东西。
#include <RcppArmadillo.h>
#include <iostream>
#include <igraph-0.7.1\include\igraph.h>
using namespace arma;
// [[Rcpp::depends(RcppArmadillo)]]
// [[Rcpp::export]]
vec component_membership(const mat& adjacencymatrix) {
igraph_t g;
igraph_adjacency(&g,&adjacencymatrix,IGRAPH_ADJ_DIRECTED);
// here is more code that is immaterial to my problem
}
编译时会报错
cannot convert 'const mat* {aka const arma::Mat<double>*}' to
'igraph_matrix_t*' for argument '2' to
'int igraph_adjacency(igraph_t*, igraph_matrix_t*, igraph_adjacency_t)'
我理解为什么会这样:我相信 igraph_matrix_t 和 arma::matrix 必须是根本不同的数据类型。我如何转换,即,但我如何轻松解决这个问题?
【问题讨论】:
-
不确定
adjacencymatrix的类型是什么,但看起来该函数需要一个指向矩阵的指针并且您传递了一个矩阵。adjacencymatrix是如何声明的? -
例如喜欢
arma::mat adjacencymatrix=arma::zeros<mat>(10,10); -
我认为指针不是问题,当我将调用更改为
igraph_adjacency(&g,&adjacencymatrix,IGRAPH_ADJ_DIRECTED);时,我得到` cannot convert const mat* {aka const arma::Mat*} to igraph_matrix_t * 用于参数 2 ....` -
这肯定不像 C。它似乎是纯 C++。
标签: type-conversion igraph rcpp armadillo