Negatif olasılık kütükleri ile çok fazla çalışma yapan sayısal bir uygulamam var (olasılıklar sıfırdan bire kadar değiştiği için), pozitif ikililerin veya negatif sonsuzluğun değerlerini alır (altta yatan olasılık sıfır ise).Haskell'de Data.Vector.Unboxed örneğini nasıl yazarım?
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
Şimdi, bir sürü Data.Vector
kullanıyorum Viterbi algoritmasının bir uygulamasında, ve gerçekten ben bazı Data.Vector
s var:
şöyle bir newtype Score
bu kullanıyorum Score
s. Bazı performans ayarlaması yapmaya çalışırken, Data.Vector.Unboxed
kullanmayı denemeye karar verdim. Ancak, türetilemeyen Unbox
için bir örnek yazmam gerekiyor ve ne yapmam gerektiğini tam olarak anlayamıyorum (özellikle, Unbox
tipinde bir yazım için sözleşme nedir). Score
, bazı yararlı kurucular ve semantiklerle gerçekten bir Double
olduğundan, bu mümkün olmalıydı. Anlayabildiğim kadarıyla, Data.Vector.Unboxed
'a Score
s' nin bir vektöründeki her bir yuvanın ne kadar büyük olması gerektiğini anlayabilmem gerekiyor ve bunları nasıl okuyacağımı ve yazacağımı tahmin ediyorum (ama heck, çok fazla Double
s gibi) .
Peki, ne yapıyorum? Teşekkürler!
Awesome, thanks! –
Artık, "Data.Vector.Primitive.Vector Double" öğesinden "Data.Vector.Primitive.Vector Double" ve "U.Vector" 'a kadar "U.Vector Score" değerinden "Hata" verilemedi. Puan 'farklı tiplerdir. 'U.Vector Double -> Int' türünden 'U.Vector Score -> Int' mümkün olan yöntemden 'Data.Vector.Generic.Base.basicLength' yönteminin zorlanmasından kaynaklanan olası çözüm: bağımsız bir 'türetme örneği' kullanın bildirimi, örnek bağlamı kendiniz belirtebilirsiniz. (Vector U.Vector Score) örneğini türetirken, – unhammer
https://ghc.haskell.org/trac/ghc/ticket/9112, göremiyorum bir çözümden bahsettiler. – unhammer