Mam duży problem, napisałem kod w pythonie, który jest używany Numpy
i Networkx
6 miesięcy temu z tym kodem:
import numpy as np
import networkx as nx
G = nx.Graph()
#add node and edges to G ...
A = nx.adj_matrix(Gx)
A = np.asarray(A)
Teraz muszę uruchomić to w klastrze obliczeniowym z najnowszą wersją Numpy. Ale kiedy uruchomię ten kod, to się nie uda, ponieważ A = np.asarray(A)
zwraca ()
Nie mam pojęcia, co robić, ponieważ ten kod jest wszędzie. Czy to błąd w Numpy czy co?
To pytanie jest związane z moim wcześniejsze pytanie
Odpowiedzi:
1 dla odpowiedzi № 1Funkcja nx.adj_matrix(G)
zwraca a scipy.sparse
obiekt macierzy zawierający macierz sąsiedztwa G.
Jeśli chcesz numpy
Macierz lub macierz można to zrobić po prostu za pomocą .todense()
metoda:
In [1]: import networkx as nx
In [2]: G = nx.path_graph(4)
In [3]: S = nx.adj_matrix(G)
In [4]: S
Out[4]:
<4x4 sparse matrix of type "<type "numpy.int64">"
with 6 stored elements in Compressed Sparse Row format>
In [5]: A = S.todense()
In [6]: A
Out[6]:
matrix([[0, 1, 0, 0],
[1, 0, 1, 0],
[0, 1, 0, 1],
[0, 0, 1, 0]])
In [7]: A.A
Out[7]:
array([[0, 1, 0, 0],
[1, 0, 1, 0],
[0, 1, 0, 1],
[0, 0, 1, 0]])
1 dla odpowiedzi nr 2
Sądząc po tej prośbie o pociągnięcie:
https://github.com/networkx/networkx/commit/67bf6c1b4d2844a859b21057a63a72b36a45906b
W listopadzie 2013 r. networkx
zmienione adjacency_matrix
(syn dla adj_matrix
) od wytwarzania gęstej matrycy do produkcji rzadkiej. W wielu przypadkach musieli dodać .todense()
podczas wywoływania tej funkcji.
Więc zmiana mogła nastąpić networkx
zamiast numpy
. Nie sądzę np.asarray
kiedykolwiek był sparse
świadomy. Zwykle służy do konwersji a np.matrix
do np.ndarray
.
Za pomocą adj_matrix().A
powinien działać w obu środowiskach. Obie np.matrix
i csr_matrix
mieć tę właściwość.