c++ - Eigen:高效等同于 MATLAB 的 changem()?

标签 c++ eigen

我需要对 Eigen VectorXi 执行操作,这相当于 MATLAB 的 changem():

http://www.mathworks.com/help/map/ref/changem.html

目前,我这样做的方式是遍历数组中的值并使用 switch/case block 执行重新映射。我猜这不是特别有效。

有没有一种使用 Eigen 的快速方法?速度对我的应用程序至关重要。

最佳答案

开关/外壳会特别慢且不灵活。

changem 采用一个矩阵和两个值 vector ,新值和旧值。如果在旧列表中找到一个条目,则将其替换为新列表中的相应条目。所以它本质上会很慢,你需要遍历整个矩阵,搜索旧列表,如果找到条目,则用新列表替换。 你怎么能加快它?首先,不要硬编码为 switch/case。现代编译器可能会优化循环而不是大量跳转,但我不能保证。而且这种方法是不灵活的。 其次,您可以对“旧” vector 进行排序并使用二进制搜索而不是线性搜索。如果旧 vector 很长,那只会有很大帮助。 第三,您可以利用您对矩阵的了解。旧值(value)观是否仅限于某些地区?有没有一个值是绝对有可能的并且可以首先测试?您能否快速排除旧列表中不允许的某些值(太大、太小、不完整)。

旧值是整数吗?可以使用索引吗?或者将其概括为散列。这会比二分查找更快,尽管散列的开销更大。 你能用另一种方法解决这个问题,并按值保留矩阵 xy 坐标的索引吗?

有很多方法。但作为第一步,只需简单地在 C 中简单地实现 Matlab 函数。它可能足够快。

关于c++ - Eigen:高效等同于 MATLAB 的 changem()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39813286/

相关文章:

C++ 将可变参数模板参数扩展为语句

c++ - 绘制 gl 场景时 CPU 使用率高;起源?

c++ - 即使主窗口关闭,应用程序也不会退出

c++ - 从 Eigen Matrix 继承并从内存构造或映射

c++ - 将两个特征向量乘以相应的元素

function - 特征库 : return a matrix block in a function as lvalue

c++ - QcustomPlot 不想绘制图形

c++ - 如何将参数传递给 std::vector::insert()?

c++ - eigen::select() 的奇怪行为

c++ - Eigen :使用 SparseMatrix 的 selfAdjointView