sparse行列を扱っています。ここでsparse行列の要素をある条件の元に別な値を置換したいです。しかし方法がわからずどのようにすれば良いか教えて欲しいです。
python
1#A is 3×3 Sparse Matrix 2 3print(A) 4#(0, 0) 0.0001 5#(1, 2) 1 6#(2, 1) 0.1 7 8B = Replace(A)# A_ij = 0 if A_ij < 0.01 9 10print(B) 11#(1, 2) 1 12#(2, 1) 0.1 13 14type(A) 15#scipy.sparse.csr.csr_matrix 16
このような置換をしたいです。
また今扱っているsparse行列は大きな規模であるため、sparse行列のまま置換を行いたいです。
追記
python
1def replace_values(sparse_matrix, threshold): 2 import numpy 3 import scipy 4 bool_ = [sparse_matrix.data > threshold][0]# 閾値を超える要素はTrueとなるbool値 5 data = numpy.where(bool_) 6 nonzero = numpy.nonzero(sparse_matrix)# nonzeroの要素番号 7 values = bool_ * sparse_matrix.data# 閾値を超えない要素をゼロにする 8 values = values[~(values == 0)]#ゼロを削除 9 return scipy.sparse.csr_matrix((values,(nonzero[0][data], nonzero[1][data])))
今この関数で望んだような行列を取得することができますが、このコードは冗長であるように感じます。実際、実行時間も長いと感じました。
このコードの修正をお願いしたいです。
回答2件
あなたの回答
tips
プレビュー