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 をいくつかのプリミティブ操作に置き換えることもテストしましたが、顕著な違いはありませんでした (実際には少し遅くなりました)。