2.5.2.2.4. 座標格納方式 (COO)

  • ‘ijv’ または 三つ組 ‘triplet’ 格納形式としてもしられます
    • 3つの NumPy 配列: row, col, data

    • data[i](row[i], col[j]) の位置の値です

    • 要素は重複しても構いません

    • _data_matrix (.data 属性を持つ疎行列) の派生クラス

  • 疎行列に構築が高速な格納方式

  • コンストラクタは以下を受け付けます:
    • 密行列(配列)

    • 疎行列

    • シェイプタプル (空の行列を作ります)

    • (data, ij) タプル

  • CSR/CSC 格納形式への変換、CSR/CSC 格納形式からの変換がとても高速です

  • 高速な行列 * ベクトル (sparsetools)

  • 高速で簡単な要素毎の演算
    • データ配列の直接的な操作 (Numpy の高速な仕組み)

  • スライスは算術ができません(直接は)

  • 利用:
    • 疎行列の格納方式の高速な変換の補助

    • 他の形式 (たいてい CSR か CSC) に変換する場合、重複する要素は足し合わせられます

      • 有限要素行列を効率的に構築するの助けとなります

2.5.2.2.4.1. 例

  • 空の COO 行列を作る:

    >>> mtx = sparse.coo_matrix((3, 4), dtype=np.int8)
    
    >>> mtx.todense()
    matrix([[0, 0, 0, 0],
    [0, 0, 0, 0],
    [0, 0, 0, 0]], dtype=int8)
  • (data, ij) タプルを利用して作る:

    >>> row = np.array([0, 3, 1, 0])
    
    >>> col = np.array([0, 3, 1, 2])
    >>> data = np.array([4, 5, 7, 9])
    >>> mtx = sparse.coo_matrix((data, (row, col)), shape=(4, 4))
    >>> mtx
    <4x4 sparse matrix of type '<... 'numpy.int64'>'
    with 4 stored elements in COOrdinate format>
    >>> mtx.todense()
    matrix([[4, 0, 9, 0],
    [0, 7, 0, 0],
    [0, 0, 0, 0],
    [0, 0, 0, 5]])
  • 重複する要素は足し合わされます:

    >>> row = np.array([0, 0, 1, 3, 1, 0, 0])
    
    >>> col = np.array([0, 2, 1, 3, 1, 0, 0])
    >>> data = np.array([1, 1, 1, 1, 1, 1, 1])
    >>> mtx = sparse.coo_matrix((data, (row, col)), shape=(4, 4))
    >>> mtx.todense()
    matrix([[3, 0, 1, 0],
    [0, 2, 0, 0],
    [0, 0, 0, 0],
    [0, 0, 0, 1]])
  • スライスできません...:

    >>> mtx[2, 3]   
    
    Traceback (most recent call last):
    ...
    TypeError: 'coo_matrix' object ...