私は大きな疎マトリックスを持っています。その疎行列のすべての要素に対してlog4
を取りたいと思います。疎行列で対数関数をとる効率的な方法
numpy.log()
を使用しようとしましたが、マトリックスでは機能しません。
また、行ごとに対数を取ることもできます。それから、古い列を新しい列で押しつぶす。
# Assume A is a sparse matrix (Linked List Format) with float values as data
# It is only for one row
import numpy as np
c = np.log(A.getrow(0))/numpy.log(4)
A[0, :] = c
これは私が期待したほど速くはありませんでした。これを行うより速い方法がありますか?
数学的に正しくないので、誰もこの解を提案していません。 'log(x)'は 'log(x + 1)'と大きく異なることがあります! (例: 'log(0.000001)= -6'、' log(0.0000001 + 1 = 0とビット) ' –
私はすべてのデータが正で、1より大きいとは言いませんでした。 – Thorn
ここに3つ(または何か)を追加する理由は全くありません。なぜなら、 'A.data'のエントリのどれもが0にならないからです。もしif '1e-16'を追加すると' log(0) 'は決してとることはないが、はるかに少ないエラーしか導入されないという同じ効果を持つだろう:[適切なアイデンティティlog(x + eps)= log(x)+ log(1 + eps/a) 'であり、ここで導入されたエラーは次のとおりです。 'eps/a'がほぼ0であれば0に近いです。 – Dougal