1 #ifndef ATGRAPH_ALGLIB_HPP 2 #define ATGRAPH_ALGLIB_HPP 9 #include <igraph/igraph.h> 12 #define plog2p( x ) ( (x) > 0.0 ? (x) * log(x) / log(2) : 0.0 ) 17 typedef sparsematrix spAlg;
19 spAlg * pajek2HashTable(FILE *f){
24 spAlg *hashTable =
new spAlg;
27 fscanf(f,
"%s %d", label, &N);
30 fscanf(f,
"%d %s", &i0, label);
31 for (
int k = 1; k < N; k++){
32 fscanf(f,
"%d %s", &i, label);
36 fscanf(f,
"%s %d", label, &E);
39 sparsecreate(N, N, E, *hashTable);
41 for (
int k = 0; k < E; k++){
42 fscanf(f,
"%d %d %lf", &i, &j, &x);
43 sparseset(*hashTable, i, j, x);
50 spAlg * igraph2HashTable(igraph_t *srcGraph)
52 igraph_integer_t N, E;
53 igraph_vector_t edges, weights;
54 spAlg *hashTable =
new spAlg;
57 N = igraph_vcount(srcGraph);
58 E = igraph_ecount(srcGraph);
59 igraph_vector_init(&edges, E * 2);
60 igraph_vector_init(&weights, E);
61 igraph_get_edgelist(srcGraph, &edges,
true);
62 if ((
bool) igraph_cattribute_has_attr(srcGraph, IGRAPH_ATTRIBUTE_EDGE,
"weight"))
63 EANV(srcGraph,
"weight", &weights);
65 igraph_vector_fill(&weights, 1.);
68 sparsecreate(N, N, E, *hashTable);
71 for (
int k = 0; k < E; k++)
72 sparseset(*hashTable, VECTOR(edges)[k], VECTOR(edges)[E+k], VECTOR(weights)[k]);
77 void setConstant(real_1d_array *v,
double constant)
79 for (
int j = 0; j < v->length(); j++)
84 void setConstant(integer_1d_array *v,
int constant)
86 for (
int j = 0; j < v->length(); j++)
91 void setLinSpaced(real_1d_array *v,
double low,
double high)
93 int length = v->length();
94 double stride = (high - low) / length;
96 for (
int j = 1; j < length; j++)
97 (*v)(j) = (*v)(j-1) + stride;
101 void setLinSpaced(integer_1d_array *v,
int low,
int high)
103 int length = v->length();
104 int stride = (high - low) / length;
106 for (
int j = 1; j < length; j++)
107 (*v)(j) = (*v)(j-1) + stride;
111 void setRow(real_2d_array *a, real_1d_array *row,
int i)
113 for (
int j = 0; j < row->length(); j++)
114 (*a)(i, j) = (*row)(j);
118 void setRow(integer_2d_array *a, integer_1d_array *row,
int i)
120 for (
int j = 0; j < row->length(); j++)
121 (*a)(i, j) = (*row)(j);
125 void setCol(real_2d_array *a, real_1d_array *col,
int j)
127 for (
int i = 0; i < col->length(); i++)
128 (*a)(i, j) = (*col)(i);
132 void setCol(integer_2d_array *a, integer_1d_array *col,
int j)
134 for (
int i = 0; i < col->length(); i++)
135 (*a)(i, j) = (*col)(i);
139 double getMin(real_1d_array *v,
int *arg)
143 for (
int j = 0; j < v->length(); j++){
152 int getMin(integer_1d_array *v,
int *arg)
156 for (
int j = 0; j < v->length(); j++){
173 while (sparseenumerate(*s, t0, t1, i, j, v))
179 double entropy(real_1d_array *dist)
182 for (
int k = 0; k < dist->length(); k++)
187 double entropyRate(spAlg *T, real_1d_array *dist)
195 while (sparseenumerate(*T, t0, t1, i, j, v))
196 s -= (*dist)(i) *
plog2p(v);
#define plog2p(x)
Calculates the log of x by x.