One of the powerful library used for graph building activities is NetworkX. It is widely used in solving graph problems and network related queries. Lets have a look into NetworkX now.
In order to use it with python import it,
import networkx as nx
The following basic graph types are provided as Python classes:
Graph
This class implements an undirected graph. It ignores multiple edges between two nodes. It does allow
self-loop edges between a node and itself.
DiGraph
Directed graphs, that is, graphs with directed edges. Provides operations common to directed graphs, (a
subclass of Graph).
MultiGraph
A flexible graph class that allows multiple undirected edges between pairs of nodes. The additional
flexibility leads to some degradation in performance, though usually not significant.
MultiDiGraph
A directed version of a MultiGraph
g=nx.Graph() g.add_edge(1,3,weight=0.2) g.add_edge(3,2,weight=.3) nx.draw(g)
we can even make edges or not as per requirement, like the code below:
import matplotlib.pyplot as plt g2=nx.Graph() g2.add_edge('A','B',weight=0.9) g2.add_node('C') #nx.draw(g2) pos = nx.spring_layout(g2) # compute graph layout nx.draw(g2, pos, node_size=700) # draw nodes and edges nx.draw_networkx_labels(g2, pos) labels = nx.get_edge_attributes(g2, 'weight') nx.draw_networkx_edge_labels(g2, pos, edge_labels=labels) plt.show(g2)
Now, if we go for a shortest path algorithm, networkx really rocks, lets take an example;
G=nx.Graph() e = [('a', 'b', 0.3), ('b', 'c', 0.9), ('a', 'c', 0.5), ('c', 'd', 1.2)] G.add_weighted_edges_from(e) pos = nx.spring_layout(G) nx.draw(G,pos,node_size=700) nx.draw_networkx_labels(G, pos) labels = nx.get_edge_attributes(G, 'weight') nx.draw_networkx_edge_labels(G, pos, edge_labels=labels) plt.show(G)
print(nx.dijkstra_path(G, 'a', 'd'))
['a', 'c', 'd']
We can even write few modular code to check the adjacency matrix and number of nodes relationship,
#Asignment 2 Comparision for i in range(3): GraphA=lstA[i] GraphB=lstB[i] Aad = nx.adjacency_matrix(GraphA) Bad = nx.adjacency_matrix(GraphB) count=i count=count+1 print('-------------****************-------------') print('Number of nodes: ',count*100) for k in range(2,4): print('An^k','n',count*100,'k',k) A_nk=np.linalg.matrix_power(Aad.todense(), k) #print(B_nk) plt.plot(A_nk) plt.show() print('Bn^k','n',count*100,'k',k) B_nk=np.linalg.matrix_power(Bad.todense(), k) #print(B_nk) plt.plot(B_nk) plt.show() print('------************------')
-------------****************------------- Number of nodes: 100 An^k n 100 k 2
Bn^k n 100 k 2
Having read this I thought it was extremely informative.
I appreciate you finding the time and energy to put this
information together. I once again find myself personally spending a
lot of time both reading and commenting. But so what, it
was still worthwhile!
Somebody necessarily assist to make critically articles I would state. This is the very first time I frequented your website page and up to now? I amazed with the research you made to make this actual post incredible. Magnificent activity!
Its like you read my mind! You appear to know
a lot about this, like you wrote the book in it or something.
I think that you could do with a few pics to drive the message home a little bit, but instead of that, this
is magnificent blog. An excellent read. I’ll certainly be back.
canada rx https://canadianpharmaceuticalsonline.home.blog/
You explained it really well.