# networkx.convert_matrix.from_numpy_matrix¶

from_numpy_matrix(A, parallel_edges=False, create_using=None)[source]

Returns a graph from numpy matrix.

The numpy matrix is interpreted as an adjacency matrix for the graph.

Parameters
Anumpy matrix

An adjacency matrix representation of a graph

parallel_edgesBoolean

If True, `create_using` is a multigraph, and `A` is an integer matrix, then entry (i, j) in the matrix is interpreted as the number of parallel edges joining vertices i and j in the graph. If False, then the entries in the adjacency matrix are interpreted as the weight of a single edge joining the vertices.

create_usingNetworkX graph constructor, optional (default=nx.Graph)

Graph type to create. If graph instance, then cleared before populated.

Notes

For directed graphs, explicitly mention create_using=nx.DiGraph, and entry i,j of A corresponds to an edge from i to j.

If `create_using` is `networkx.MultiGraph` or `networkx.MultiDiGraph`, `parallel_edges` is True, and the entries of `A` are of type `int`, then this function returns a multigraph (constructed from `create_using`) with parallel edges.

If `create_using` indicates an undirected multigraph, then only the edges indicated by the upper triangle of the matrix `A` will be added to the graph.

If the numpy matrix has a single data type for each matrix entry it will be converted to an appropriate Python data type.

If the numpy matrix has a user-specified compound data type the names of the data fields will be used as attribute keys in the resulting NetworkX graph.

Examples

Simple integer weights on edges:

```>>> import numpy as np
>>> A = np.array([[1, 1], [2, 1]])
>>> G = nx.from_numpy_matrix(A)
```

If `create_using` indicates a multigraph and the matrix has only integer entries and `parallel_edges` is False, then the entries will be treated as weights for edges joining the nodes (without creating parallel edges):

```>>> A = np.array([[1, 1], [1, 2]])
>>> G = nx.from_numpy_matrix(A, create_using=nx.MultiGraph)
>>> G
AtlasView({0: {'weight': 2}})
```

If `create_using` indicates a multigraph and the matrix has only integer entries and `parallel_edges` is True, then the entries will be treated as the number of parallel edges joining those two vertices:

```>>> A = np.array([[1, 1], [1, 2]])
>>> temp = nx.MultiGraph()
>>> G = nx.from_numpy_matrix(A, parallel_edges=True, create_using=temp)
>>> G
AtlasView({0: {'weight': 1}, 1: {'weight': 1}})
```

User defined compound data type on edges:

```>>> dt = [("weight", float), ("cost", int)]
>>> A = np.array([[(1.0, 2)]], dtype=dt)
>>> G = nx.from_numpy_matrix(A)
>>> list(G.edges())
[(0, 0)]
>>> G["cost"]
2
>>> G["weight"]
1.0
```