2011-10-27 23 views

答えて

63

スパース行列を初期化するときに、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 
16

scipyにはいくつかの疎なマトリックスクラスがあります。

bsr_matrix(ARG1 [、形状、DTYPE、コピー、ブロックサイズ])ブロックスパース行行列
coo_matrix(ARG1 [、形状、DTYPE、コピー])座標形式の疎行列。
csc_matrix(ARG1 [、形状、DTYPE、コピー])圧縮スパース列の行列
csr_matrix(ARG1 [、形状、DTYPE、コピー])圧縮スパース行行列
dia_matrix(ARG1 [、形状、DTYPE、コピー]) DIAgonalストレージを持つスパース行列
dok_matrix(arg1 [、shape、dtype、copy])キーベースの疎行列の辞書。
lil_matrix(ARG1 [、形状、DTYPE、コピー])行ベースリンクリスト疎行列

それらの任意の変換を行うことができます。

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を参照してください。

3

逆行列の場合、関数はinv(A)ですが、巨大な行列の場合、計算コストが高く不安定であるため、使用しないでください。逆に近似を使用するか、Ax = bを解く必要がある場合は、Aを必要としません。-1

関連する問題