numpy.matrixまたは配列をscipyスパース行列に変換する方法


83

SciPyスパース行列の場合、todense()またはtoarray()を使用してNumPy行列または配列に変換できます。逆を行う機能は何ですか?

検索しましたが、どのキーワードが正しいヒットになるのかわかりませんでした。

回答:


122

スパース行列を初期化するときに、引数としてnumpy配列または行列を渡すことができます。たとえば、CSRマトリックスの場合、次のことができます。

>>> import numpy as np
>>> from scipy import sparse
>>> A = np.array([[1,2,0],[0,0,3],[1,0,4]])
>>> B = np.matrix([[1,2,0],[0,0,3],[1,0,4]])

>>> A
array([[1, 2, 0],
       [0, 0, 3],
       [1, 0, 4]])

>>> sA = sparse.csr_matrix(A)   # Here's the initialization of the sparse matrix.
>>> sB = sparse.csr_matrix(B)

>>> sA
<3x3 sparse matrix of type '<type 'numpy.int32'>'
        with 5 stored elements in Compressed Sparse Row format>

>>> print sA
  (0, 0)        1
  (0, 1)        2
  (1, 2)        3
  (2, 0)        1
  (2, 2)        4

2
高次元の配列はどうですか?
Nirmal 2018年

マトリックスのメモリエラーが発生します(〜25,000x25,000)。また、私が適用すると、メモリ消費量が狂ったように跳ね上がりますsparse.csr_matrix
MartinThoma19年

22

scipyにはいくつかのスパース行列クラスがあります。

bsr_matrix(arg1 [、shape、dtype、copy、blocksize])ブロックスパース行行列
coo_matrix(arg1 [、shape、dtype、copy])COOrdinate形式のスパース行列。
csc_matrix(arg1 [、shape、dtype、copy])圧縮スパース列行列
csr_matrix(arg1 [、shape、dtype、copy])圧縮スパース行行列
dia_matrix(arg1 [、shape、dtype、copy])DIAgonalストレージを
使用したスパース行列dok_matrix (arg1 [、shape、dtype、copy])キーの辞書ベースのスパース行列。
lil_matrix(arg1 [、shape、dtype、copy])行ベースのリンクリストスパース行列

それらのいずれかが変換を行うことができます。

import numpy as np
from scipy import sparse
a=np.array([[1,0,1],[0,0,1]])
b=sparse.csr_matrix(a)
print(b)

(0, 0)  1
(0, 2)  1
(1, 2)  1

http://docs.scipy.org/doc/scipy/reference/sparse.html#usage-informationを参照してください。


0

逆関数についてはinv(A)、ですが、巨大な行列の場合、計算コストが非常に高く、不安定であるため、使用することはお勧めしません。代わりに、逆数の近似を使用する必要があります。または、Ax = bを解く場合は、実際にはA -1は必要ありません。


4
質問は、行列演算の逆行列ではなく、numpy行列/配列を使用してscipyスパース行列を生成する方法を尋ねます。
Virgil Ming
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.