用于高效网格搜索/元组的良好 C、C++ 库,理想情况下与 Eigen 绑定

计算科学 有限差分 C++ 网格 本征
2021-12-11 15:44:46

我有一个q维网格,在运行时已知,而不是编译时已知,具有50指向每个方向,因此503我想首先构建然后以每个点作为其单个参数调用函数的组合,以将输出存储在具有指向参数的指针的数据结构中。

是否有一种在 C++ 中实现这一点的好方法,可能是使用经过优化以处理此类任务的库?理想情况下,与 Eigen 有良好的绑定,但如果需要,我可以自己破解。更正式地说:

我现在的问题是填充网格点的向量,每个 lambda 范围从0.951在步骤0.001这样我就有了笛卡尔坐标系的模型[0.95,1]×[0.95,1]×[0.95,1]R3.

我对解决方案的第一次尝试是这样的:

class grid_point{
grid_point(int q){

lambda = VectorXf::Zeros(q);
}

private:
VectorXd lambda;
float likelihood;
}

然后实例化vector<grid_point> my_grid(num_steps);where num_steps = pow(50,3)我想这里的这个问题很相似,但它实现了一堆嵌套for循环。我想知道是否有可能作为 STL 的一部分或在此站点上的人们正在使用的某些自定义包中本机实现此功能的包。在许多学科中,执行网格搜索必须是一条行之有效的路径。

我也许可以使用图书馆<algorithm>,但对我来说,这感觉就像我在重新发明轮子,因为我确信必须有更有效的方法来

  1. 生成跨越我的模型的所有元组R3
  2. 然后调用一个带有单个参数的函数,将其输出写入grid_point.

非常感谢,所有!

似乎这个问题并没有引起太大的兴趣。但这里是关于可以做什么的更新:

我目前的感觉是从头开始构建它,并以某种方式尝试在此处找到此方法的使用,在此处输入链接描述

1个回答

我会支持在上下文中表达的意见。对于那个小问题和有限的使用,您不需要库。结构化网格的生成和检索点最多可以在几个代码屏幕中进行编码。

但是,我会为您指出 ViennaGrid库,它可以使用并且实际上提供了 STL 迭代器。此外,ViennaGrid 的文档还包含一些关于替代方案(结构化和非结构化网格)的讨论。

无论如何,在我看来,即使是一个小型的 ViennaGrid 库也对这项任务来说太过分了。