Using a square matrix with Networkx but keep getting Adjacency matrix not square
Question:
So I’m using Networkx to plot a cooc matrix. It works well with small samples but I keep getting this error when I run it with a big cooc matrix (reason why I can’t share a minimum reproductible example):
Traceback (most recent call last):
File "", line 113, in <module>
G = nx.from_pandas_adjacency(matrix)
File "", line 205, in from_pandas_adjacency
G = from_numpy_array(A, create_using=create_using)
File "", line 1357, in from_numpy_array
raise nx.NetworkXError(f"Adjacency matrix not square: nx,ny={A.shape}")
networkx.exception.NetworkXError: Adjacency matrix not square: nx,ny=(74, 76)
This is my code :
G = nx.from_pandas_adjacency(matrix)
# visualize it with pyvis
N = Network(height='100%', width='100%', bgcolor='#222222', font_color='white')
N.barnes_hut()
for n in G.nodes:
N.add_node(n)
for e in G.edges:
N.add_edge((e[0]), (e[1]))
And this is the ouput of my matrix :
Ali Sarah Josh Maura Mort ... Jasmine Lily Adam Ute
Ali 0 3 2 2 ... 0 0 1 0
Sarah 3 0 3 3 ... 0 0 1 0
Josh 2 3 0 4 ... 0 0 1 0
Maura Mort 2 3 4 0 ... 0 0 1 0
Shelly 0 0 0 0 ... 0 0 0 0
... ... ... ... ... ... ... ... ... ...
Nicol 0 0 0 0 ... 0 0 0 0
Jasmine 0 0 0 0 ... 0 0 0 0
Lily 0 0 0 0 ... 0 0 0 0
Adam 1 1 1 1 ... 0 0 0 0
Ute 0 0 0 0 ... 0 0 0 0
[74 rows x 74 columns]
Weirdly, it looks like my matrix is a square (74 x 74).
Any idea what might be the problem ?
Answers:
So I was able to fix my problem by first converting my matrix into a stack.
cooc_matrix = matrix(matrixLabel, texts)
matrix = pd.DataFrame(cooc_matrix.todense(), index=matrixLabel, columns=matrixLabel)
print(matrix)
#This fixed my problem
stw = matrix.stack()
stw = stw[stw >= 1].rename_axis(('source', 'target')).reset_index(name='weight')
print(stw)
G = nx.from_pandas_edgelist(stw, edge_attr=True)
I got the same problem. I am using a square pandas data frame (as indicated by df.shape) but I am getting the error Adjacency matrix not square. Using stack()
and from_pandas_edgelist()
solved the problem for me.
So I’m using Networkx to plot a cooc matrix. It works well with small samples but I keep getting this error when I run it with a big cooc matrix (reason why I can’t share a minimum reproductible example):
Traceback (most recent call last):
File "", line 113, in <module>
G = nx.from_pandas_adjacency(matrix)
File "", line 205, in from_pandas_adjacency
G = from_numpy_array(A, create_using=create_using)
File "", line 1357, in from_numpy_array
raise nx.NetworkXError(f"Adjacency matrix not square: nx,ny={A.shape}")
networkx.exception.NetworkXError: Adjacency matrix not square: nx,ny=(74, 76)
This is my code :
G = nx.from_pandas_adjacency(matrix)
# visualize it with pyvis
N = Network(height='100%', width='100%', bgcolor='#222222', font_color='white')
N.barnes_hut()
for n in G.nodes:
N.add_node(n)
for e in G.edges:
N.add_edge((e[0]), (e[1]))
And this is the ouput of my matrix :
Ali Sarah Josh Maura Mort ... Jasmine Lily Adam Ute
Ali 0 3 2 2 ... 0 0 1 0
Sarah 3 0 3 3 ... 0 0 1 0
Josh 2 3 0 4 ... 0 0 1 0
Maura Mort 2 3 4 0 ... 0 0 1 0
Shelly 0 0 0 0 ... 0 0 0 0
... ... ... ... ... ... ... ... ... ...
Nicol 0 0 0 0 ... 0 0 0 0
Jasmine 0 0 0 0 ... 0 0 0 0
Lily 0 0 0 0 ... 0 0 0 0
Adam 1 1 1 1 ... 0 0 0 0
Ute 0 0 0 0 ... 0 0 0 0
[74 rows x 74 columns]
Weirdly, it looks like my matrix is a square (74 x 74).
Any idea what might be the problem ?
So I was able to fix my problem by first converting my matrix into a stack.
cooc_matrix = matrix(matrixLabel, texts)
matrix = pd.DataFrame(cooc_matrix.todense(), index=matrixLabel, columns=matrixLabel)
print(matrix)
#This fixed my problem
stw = matrix.stack()
stw = stw[stw >= 1].rename_axis(('source', 'target')).reset_index(name='weight')
print(stw)
G = nx.from_pandas_edgelist(stw, edge_attr=True)
I got the same problem. I am using a square pandas data frame (as indicated by df.shape) but I am getting the error Adjacency matrix not square. Using stack()
and from_pandas_edgelist()
solved the problem for me.