Eigen的unaryExpr()是否始终按顺序执行?
Eigen的unaryExpr()是否始终按顺序执行?
我太懂这种顾虑了!你写的带内部状态的IIR滤波器,filter()函数完全依赖调用顺序来维护状态,要是执行顺序乱了,滤波结果肯定全错对吧?那我直接给你拍板:Eigen的unaryExpr()会严格按照数组元素的存储顺序,依次执行你的一元函数,完全符合你的需求。
具体说的话:
- Eigen默认是列优先存储数组,这时候
unaryExpr()会从第一列的第一个元素开始,从上到下遍历完一整列,再接着处理下一列,全程挨个按顺序调用你的filter(); - 要是你手动设置了行优先存储,那就是从第一行第一个元素开始,从左到右遍历完一整行,再处理下一行;
- 不管哪种存储方式,核心都是严格遵循元素在内存里的先后顺序来执行,绝对不会搞并行乱序或者跳着访问元素的操作。
所以你写的这段代码:
input.unaryExpr(filter);
完全靠谱,每个样本都会按原序列的先后顺序被传入filter(),你的IIR滤波器内部状态会被正确更新,不会出现因为顺序混乱导致的错误结果。
备注:内容来源于stack exchange,提问作者Nils Werner
相关产品推荐
相关产品推荐

