I have weighted two graphs (
G_random), the one is a copy of the other. After using
igraph_rewire on my
G_random, I noticed the edge attributes do not carry over (perhaps that can be added to the documentation), and I would like to reassign them (randomly is fine). However,
some of the functions in Chapter 12. Graph, Vertex and Edge Attributes are documented very confusingly. For example
igraph_cattribute_EAN_setv has the following:
igraph_cattribute_EAN_setv— Set a numeric edge attribute for all vertices.
int igraph_cattribute_EAN_setv(igraph_t *graph, const char *name, const igraph_vector_t *v);
The attribute will be added if not present yet.
Name of the attribute.
The new attribute values. The length of this vector must match the number of edges.
I think it assigns the values in
v one-to-one to edges in
G (or at least that is the function I am looking for), but given the reference to vertices, I am a bit confused. I would just like confirmation that the following makes sense:
Excerpt of C++ code:
// turn on attribute handling for igraph to handle edge weights igraph_i_set_attribute_table(&igraph_cattribute_table); igraph_t G; read_graph(infile, G, IGRAPH_ADD_WEIGHTS_YES); // function that reads in a weighted graph // make copy of G igraph_t G_random; igraph_copy(&G_random, &G); // rewire the copy igraph_rewire(&G_random, 3*E, IGRAPH_REWIRING_SIMPLE); // fetch edge weights from original graph igraph_vector_t edge_weights; igraph_vector_init(&edge_weights, E); igraph_cattribute_EANV(&G, "weight", igraph_ess_all(IGRAPH_EDGEORDER_ID), &edge_weights); // assign them to edges in the graph copy igraph_cattribute_EAN_setv(&G_random, "weight", &edge_weights); // clean up igraph_vector_destroy(&edge_weights);