Как преобразовать "SciPy разреженную матрицу" в "матрицу NumPy"?
Я использую функцию python, называемую "incidence_matrix (G)", которая возвращает матрицу инцидентов графика. Это из пакета Networkx. Проблема, с которой я столкнулся, - это тип возврата этой функции - "Scipy Sparse Matrix". Мне нужно иметь матрицу инцидентов в формате матрицы или массива numpy. Мне было интересно, есть ли какой-нибудь простой способ сделать это или нет? Или есть встроенная функция, которая может сделать это преобразование для меня или нет?
Спасибо
Ответы
Ответ 1
scipy.sparse.*_matrix
Имеет несколько полезных методов, например, если a
, например, scipy.sparse.csr_matrix
:
-
a.toarray()
или aA
- возвращает плотное ndarray представление этой матрицы. (numpy.array
, рекомендуется) -
a.todense()
или aM
- возвращает плотное матричное представление этой матрицы. (numpy.matrix
)
Ответ 2
Самый простой способ - вызвать метод todense() для данных:
In [1]: import networkx as nx
In [2]: G = nx.Graph([(1,2)])
In [3]: nx.incidence_matrix(G)
Out[3]:
<2x1 sparse matrix of type '<type 'numpy.float64'>'
with 2 stored elements in Compressed Sparse Column format>
In [4]: nx.incidence_matrix(G).todense()
Out[4]:
matrix([[ 1.],
[ 1.]])
In [5]: nx.incidence_matrix(G).todense().A
Out[5]:
array([[ 1.],
[ 1.]])
Ответ 3
Я обнаружил, что в случае csr-матриц todense()
и toarray()
просто обертывают кортежи, а не создают форматированную версию данных в форме матрицы ndarray. Это неприменимо для классификаторов skmultilearn, которые я тренирую.
Я перевел его на lil matrix - формат numpy может точно разобрать, а затем запустить toarray()
на этом:
sparse.lil_matrix(<my-sparse_matrix>).toarray()