私は確率の負のログを使って多くの仕事をしています。(確率は0から1までの範囲であるため)正の倍数の値、または負の無限大の値をとります。HaskellでData.Vector.Unboxedインスタンスを作成するにはどうすればよいですか?
newtype Score = Score Double
deriving (Eq, Ord)
--^A "score" is the negated logarithm of a probability
negLogZero :: Score --^Stands in for - log 0
negLogZero = Score 10e1024
negLogOne :: Score --^- log 1
negLogOne = Score 0.0
unScore :: Score -> Double
unScore (Score x) = x
instance Show Score where
show (Score x) = show x
を今、私は多くのことをData.Vector
使用してきたビタビアルゴリズムの実装では、実際に私はいくつかのData.Vector
秒を持っている:
次のように私はnewtypeのScore
でこれらを使用していますScore
s。パフォーマンスチューニングを試みているうちに、Data.Vector.Unboxed
を試してみることにしました。しかし、私はUnbox
のインスタンスを作成する必要があります。これは導き出すことができません。私は何をする必要があるのかよく分かりません(特に、Unbox
型の契約です)。 Score
は実際には便利なコンストラクタとセマンティクスを持つDouble
なので、これは可能なはずです。私が言うことができる限り、私はScore
のベクトルの各スロットがどれくらい大きくなければならないかをData.Vector.Unboxed
に伝えることができる必要があります。そして、それらを読み書きする方法を推測します(しかし、彼らはDouble
とよく似ています) 。
どうすればいいですか?ありがとう!
大変感謝! –
これは、ghc 7.8.4では動作しなくなりました。 'Data.Vector.Primitive.Vector Double'と 'U.Vector'が 'Data.Vector.Primitive.Vector Double'から 'U.Vector Score'スコアは異なるタイプです。可能性のある修正:スタンドアロンの「インスタンスを導出する」を使用して、 'U.Vector Double - > Int'型のメソッド 'Data.Vector.Generic.Base.basicLength' (Vector U.Vector Score) ' – unhammer
https://ghc.haskell.org/trac/ghc/ticket/9112のインスタンスを派生させた場合は、私は見えませんが、関連性があるようです彼らは解決策に言及しました。 – unhammer