TL; DR-从github自述文件中获得一些如何使用C ++代码的说明(请参阅下文),由于我从未做过C ++,因此我正在努力实现它们。
所以首先要先做;我是一名具有python良好背景的理科学生。我需要使用一些用C ++编写的代码(我以前从未使用过C ++)。在过去的几天里,我一直在疯狂地搜寻,以便弄清楚如何使用代码。但是,如果我到处都犯了愚蠢的pythonic错误,请原谅。 github给出了以下指示:
“要在C ++程序中为单个统计上同质的网络生成邻接矩阵,请包含头文件secorder_rec_1p.hpp并以secorder_rec_1p的身份调用
gsl_matrix *W = secorder_rec_1p(N_nodes, p, alpha_recip, alpha_conv,alpha_div, cc_chain, rng);
其中N_nodes是网络中的节点数,rng是指向已初始化的gsl随机数生成器的指针。 W是一个邻接矩阵,如果从节点j到节点i有连接,则W_ij = 1,否则为零。”
对于以前从未做过C ++的人来说,一开始就相当混乱。经过大量的搜索等工作之后,现在变得更加混乱了,我有一个.c文件,我希望可以解决这个问题。不幸的是,这给了我一个我有点理解但不知道如何解决的错误。
所以我的代码是:
#include "secorder_rec_1p.hpp"
#include <time.h>
#include <gsl/gsl_rng.h>
using namespace std;
extern int N;
extern double p, recip, conv, divg, chain;
int main (){
int N;
N = 1000;
gsl_rng * rng = gsl_rng_alloc(gsl_rng_taus); //I'm not really sure what it does but I don't get any mention of this in the errors so I think it's ok. Not entirely sure if this is a "pointer to an initialized gsl random num generator"
double p, recip, conv, divg, chain;
recip = 0.1;
p = 0.1;
conv = 0.1;
divg = 0.1;
chain = 0.1;
int W [N][N];
int i,j;
double result = rand()/ RAND_MAX;
for(i=0; i<N; i++)
for(j=0; j<N; j++)
{
if(result > p){
W [i][j] = 1;
} else {
W[i][j] = 0;
}
}
gsl_matrix *W = secorder_rec_1p(N, p, recip, conv, divg, chain, rng);
}
当我尝试“制作” .c文件时,我收到一个声明错误(这是正确的编译吗?在实际运行脚本之前,我需要这样做吗?)。该错误引用了与我的W的声明冲突。
我的(显然是错误的)理解是,我正在创建一个N x N的数组(矩阵?),其中填充了1s和0s,其中元素M_ij为1,概率为p,否则为0。
然后这就是我的理解力下降的地方,但是* W表示它指向带有W标记的事物,因此应该是我的矩阵和gsl_matrix,等于该函数的输出。我不确定在这种情况下,equals是什么意思,因为它应该生成一个新的矩阵。因此,如果这是python,我希望新矩阵的名称位于equals的左侧,而右侧则是用于生成该矩阵的代码。我不知道这是怎么回事。
对于我的错误以及有关c ++的工作方式等方面的任何帮助,我们将不胜感激。