/ / Numpy's asarray () nie działa z csr_matrix - python, numpy

Funkcja asarray Numpy () nie działa z csr_matrix - python, numpy

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 № 1

Funkcja 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ść.