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 ...