2.5.2.2.5. 圧縮行格納方式 (CSR)¶
- 行指向
- 3つの NumPy 配列: indices, indptr, data
indices は列インデクスの配列
data は非ゼロの値に対応する配列
indptr は indices と data の中の行の始まりを示します
n_row + 1 は長さで、最後の要素 = 値の数 = ``indices` と data の両者の長さ
i-番目の行の非ゼロの値は行インデクス indices[indptr[i]:indptr[i+1]] を使って data[indptr[i]:indptr[i+1]] になります。
要素 (i, j) は data[indptr[i]+k] としてアクセスすることができ、ここで k は indices[indptr[i]:indptr[i+1]] の中の j の位置です。
_cs_matrix
(CSR/CSC 共通の機能を持つ) の派生クラス_data_matrix
(.data 属性を持つ疎行列) の派生クラス
行列ベクトル積と他の算術演算が高速です (sparsetools)
- コンストラクタは以下を受け付けます:
密行列(配列)
疎行列
シェイプタプル (空の行列を作ります)
(data, ij) タプル
(data, indices, indptr) タプル
効率的な行スライス、行指向演算
列スライスは低速で疎行列構造の変更は高くつきます
- 利用:
実際の計算 (多くの線形代数ソルバーはこの形式をサポートします)
2.5.2.2.5.1. 例¶
空の CSR 行列を作る:
>>> mtx = sparse.csr_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, 0, 1, 2, 2, 2]) >>> col = np.array([0, 2, 2, 0, 1, 2]) >>> data = np.array([1, 2, 3, 4, 5, 6]) >>> mtx = sparse.csr_matrix((data, (row, col)), shape=(3, 3)) >>> mtx <3x3 sparse matrix of type '<... 'numpy.int64'>' with 6 stored elements in Compressed Sparse Row format> >>> mtx.todense() matrix([[1, 0, 2], [0, 0, 3], [4, 5, 6]]...) >>> mtx.data array([1, 2, 3, 4, 5, 6]...) >>> mtx.indices array([0, 2, 2, 0, 1, 2], dtype=int32) >>> mtx.indptr array([0, 2, 3, 6], dtype=int32)
(data, indices, indptr) タプルを利用して作る:
>>> data = np.array([1, 2, 3, 4, 5, 6]) >>> indices = np.array([0, 2, 2, 0, 1, 2]) >>> indptr = np.array([0, 2, 3, 6]) >>> mtx = sparse.csr_matrix((data, indices, indptr), shape=(3, 3)) >>> mtx.todense() matrix([[1, 0, 2], [0, 0, 3], [4, 5, 6]])