Matlab中的快速DP(用于配置文件HMM的Viterbi)

时间:2014-01-18 19:12:39

标签: matlab profile hidden-markov-models viterbi

我在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实施维特比的人,所以也许你有一些建议。我还看了一下Matlab自己的hmmviterbi,但没有任何启示(也使用嵌套循环)。我还测试了用一些原始操作替换max,但没有明显的差异(实际上有点慢)。

1 个答案:

答案 0 :(得分:0)

不幸的是,循环在Matlab中速度很慢(尽管在最近的版本中它会变得更好) - 我认为它不容易被矢量化/并行化,因为循环内的操作不是独立于其他迭代。

这对于MEX来说似乎是一项任务 - 在C语言中写这个并不是太多的工作,预期的加速可能非常大。