3

我的大部分代码都使用 Eigen,但我想使用 GSL 的 Miser 或 Vegas monte-carlo 集成。我需要将 Eigen 的向量转换为doubles 的 c 数组,最好的方法是什么?

Matrix<double,3,1> --> c_array []
4

1 回答 1

5

我以前和Eigen合作过......

通常,为了简单地访问内部数组数据,就像用户 janneb 在这个线程中提到的那样,你只想调用data()

Vector3d v;
// Operations to add values to the vector.
double *c_ptr = v.data();

如果您希望迭代各个值以执行某些操作,则需要迭代每一行 (.row(index))列 (.col(index)),具体取决于您要在目标中放置的矩阵顺序向量。

在您的具体示例中,您只需要迭代行:

Matrix<double,3,1> --> c_array []

你会想打电话给.col(0)。如果出现类似的需求,具体的文档总是有帮助的!

所以你最终会得到类似的东西(假设你希望使用三行单列矩阵):

Vector3d v;
// Operations to add values to the vector.
for (int i=0; i<v.rows(); ++i)
  c_array[i] = v(i,0);

希望有帮助。

于 2012-10-11T22:44:39.837 回答