0

我在 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 ,但没有明显差异(实际上有点慢)。

4

1 回答 1

0

不幸的是,Matlab 中的循环速度很慢(尽管使用更新的版本会变得更好)——而且我认为它不能很容易地矢量化/并行化,因为循环内的操作并不独立于其他迭代。

这似乎是 MEX 的一项任务——用 C 语言编写它不应该做太多工作,而且预期的加速可能非常大。

于 2014-01-18T20:25:12.777 回答