我在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我相信我不是第一个将viterbi实现为profile HMM的人,所以也许你会有一些建议。我还研究了Matlab自己的hmmviterbi,但没有发现(也使用了嵌套循环)。我还测试了用一些基本操作替换max,但没有明显的区别(实际上有点慢)。
发布于 2014-01-19 04:25:13
不幸的是,在Matlab中循环很慢(但在最近的版本中变得更好)-我不认为它可以很容易地向量化/并行化,因为循环中的操作不独立于其他迭代。
这似乎是MEX的一项任务--用C语言编写它应该不会有太多的工作,而且预期的加速比可能会相当大。
https://stackoverflow.com/questions/21208664
复制相似问题