Che cosa genererà per me un file di matrice adiacenza con una topologia specificata?

4

Sto scrivendo un'applicazione che richiede un file che specifica una matrice di adiacenza e la usa per costruire un grafico (in questo caso, un social network diretto).

Quello che vorrei fare è specificare la dimensione della matrice e poi farla generare una matrice di adiacenza con una di queste topologie: anello, gerarchico, completamente connesso, casuale e piccolo (ogni nodo x gradi di separazione da ogni altro). Idealmente un file di testo sarebbe l'output.

Non riesco a creare questi file manualmente perché la dimensione è in migliaia ^ 2 ... Completamente connessi e casuali non sono richiesti al 100% ma sarebbero belli, posso solo implementarli nel codice.

Ho letto una tesi che ha specificato che utilizzava un'applicazione situata all'indirizzo link ... ma non sembra più esistere quindi non sono sicuro di cosa fare. Ho pensato che ci sarebbero un sacco di applicazioni come questa là fuori, ma non ne vedo nessuna.

Quindi, c'è un programma là fuori che potrebbe generare una matrice di adiacenza con una topologia configurabile in un file di testo?

    
posta Dr. Thomas C. King 24.02.2012 - 19:21
fonte

1 risposta

2

quindi vuoi:

graph => AM representation => textfile

questo scriptlet dovrebbe fare il trucco

(si basa su due librerie python , Networkx e NumPy )

>>> import numpy as NP       # import NumPy
>>> import networkx as NX    # import top-level networkx namespace
>>> # mock some data
>>> # create a graph using a built-in graph generator from networkx
>>> G = NX.navigable_small_world_graph(12, 2, 1, 2, 2, seed=542)
>>> type(G)
  <class 'networkx.classes.digraph.DiGraph'>

>>> # express the graph as an Adjacency Matrix:
>>> # (a square matrix symmetric about the main diagonal)
>>> AM = NX.to_numpy_matrix(G)

>>> # use a built-in function from NumPy 
>>> # to save the Adjacency Matrix as a text file
    # import the library

>>> NP.savetxt("am.txt", AM, delimiter=',', newline="\n", fmt='%d')

>>> # to informally verify that it was saved correctly (just first 500 bytes)
>>> # read the text file back out 
>>> with open("am.txt", "r") as f:
f.read(500)

  '0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
   0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,
   0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,
   0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,...'

>>> # assertion for a unit test would look something like this:
>>> val AM0 = NP.loadtxt("am.txt", delimiter=",")
>>> NP.assert_allclose(AM, AM0, rtol=1e-5, atol=1e-3)
    
risposta data 04.04.2012 - 20:50
fonte

Leggi altre domande sui tag