2

与えられた行列がまたは/Mを介して作成されたかどうかを判断する方法または信頼できる方法はありますか?coo_matrix()csc_matrix()csr_matrix()

このようなメソッドをどのように書くことができますか?

MATRIX_TYPE_CSC = 1
MATRIX_TYPE_CSR = 2
MATRIX_TYPE_COO = 3
MATRIX_TYPE_BSR = 4
...

def getMatrixType(M):
    if ...:
         return MATRIX_TYPE_COO
    else if ...:
         return MATRIX_TYPE_CSR
    return ...

ありがとう!

4

3 に答える 3

4

行列が疎行列であると仮定すると、次の.getformat()メソッドが必要になります。

In [70]: s = scipy.sparse.coo_matrix([1,2,3])

In [71]: s
Out[71]: 
<1x3 sparse matrix of type '<type 'numpy.int32'>'
    with 3 stored elements in COOrdinate format>

In [72]: s.getformat()
Out[72]: 'coo'

In [73]: s = scipy.sparse.csr_matrix([1,2,3])

In [74]: s
Out[74]: 
<1x3 sparse matrix of type '<type 'numpy.int32'>'
    with 3 stored elements in Compressed Sparse Row format>

In [75]: s.getformat()
Out[75]: 'csr'
于 2013-02-13T19:14:04.547 に答える
3

SciPy は、疎行列タイプをチェックするための機能的なインターフェースを提供しているようです:

In [38]: import scipy.sparse as sps

In [39]: sps.is
sps.issparse        sps.isspmatrix_coo  sps.isspmatrix_dia
sps.isspmatrix      sps.isspmatrix_csc  sps.isspmatrix_dok
sps.isspmatrix_bsr  sps.isspmatrix_csr  sps.isspmatrix_lil

例:

In [39]: spm = sps.lil_matrix((4, 5))

In [40]: spm
Out[40]: 
<4x5 sparse matrix of type '<type 'numpy.float64'>'
    with 0 stored elements in LInked List format>

In [41]: sps.isspmatrix_lil(spm)
Out[41]: True

In [42]: sps.isspmatrix_csr(spm)
Out[42]: False
于 2013-02-13T19:18:48.300 に答える
2
def getMatrixType(M):
    if isinstance(M, matrix_coo):
         return MATRIX_TYPE_COO
    else if isinstance(M, matrix_csr):
         return MATRIX_TYPE_CSR

の型scipy.sparse.coo_matrixtypeであるため、問題なくisinstance動作します。

しかし...なぜあなたはこれをしたいのですか?それはあまりPythonicではありません。

于 2013-02-13T19:15:55.687 に答える