[英]Fast DP in Matlab (Viterbi for profile HMMs)
我在Matlab中使用viterbi logodds計算存在效率問題。
基本上,我的問題是必須具有嵌套循環,這會使代碼減慢很多。 這是昂貴的部分:
for i=1:input_len
for j=1:num_states
v_m=emission_value+max_over_3_elements; %V_M
v_i=max_over_2_elements; %V_I
v_d=max_over_2_elements; %V_D
end
end
我相信我不是第一個為配置文件HMM實施viterbi的人,所以也許您有一些建議。 我還研究了Matlab自己的hmmviterbi,但沒有任何啟示(也使用嵌套循環)。 我還測試了用一些原始操作替換max,但是沒有明顯的區別(實際上慢一點)。
不幸的是,循環在Matlab中的運行速度很慢(盡管在最新版本中會變得更好),而且我不認為可以輕松地對其進行矢量化/並行化,因為循環內部的操作並不依賴於其他迭代。
對於MEX來說,這似乎是一項任務-用C語言編寫它應該不會做太多工作,並且預期的加速可能會很大。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.