スパースベクトルの扱い
scipy.sparse を使う
Sparse Arrays (scipy.sparse) — SciPy v1.15.3 Manual
scipy.sparseで疎行列入門 Python - Qiita
csr_matrix (Compressed Sparse Row matrix) または csc_matrix (Compressed Sparse Column) を使う
code:csr.py
import numpy as np
from scipy.sparse import csr_matrix
# スパースベクトル(CSR形式の1行行列として作成)
data = np.array(1, 0, 0, 5, 0, 2, 0)
sparse_vector = csr_matrix(data)
# 非ゼロ要素の値
non_zero_values = sparse_vector.data
print(f"非ゼロ要素の値: {non_zero_values}") # 出力: 1 5 2
# 非ゼロ要素の列インデックス
column_indices = sparse_vector.indices
print(f"非ゼロ要素の列インデックス: {column_indices}") # 出力: 0 3 5
# 値とインデックスをペアにする
for idx, val in zip(sparse_vector.indices, sparse_vector.data):
print(f"インデックス: {idx}, 値: {val}")
# 複数行も、行単位で扱うなら CSR、列扱うなら CSC
data_list = [
1, 0, 0, 2, 0,
0, 0, 3, 0, 0,
4, 0, 0, 0, 5,
0, 6, 7, 0, 0
]
matrix = csr_matrix(data_list)
matrix2.indices # => array(0, 4, dtype=int32)
matrix2.data # => array(4, 5)
# 横断で出てくるので気をつける必要ある
matrix.indice # => array(0, 3, 2, 0, 4, 1, 2, dtype=int32)
# 列アクセスもできる
matrix:, 2:3.data #=> array(3, 7)