[英]Copy an Eigen vector to a C array?
如何将本征向量mesh
复制到C数组r
?
double *r;
typedef Eigen::VectorXd RealVector;
Eigen::Map<RealVector>(r, 1, mesh.cols()) = mesh;
从本征给出断言
DenseBase::resize() does not actually allow to resize.
相同的消息来自任何一个
Eigen::Map<RealVector>(r, mesh.cols()) = mesh;
要么
Eigen::Map<RealVector>(r, mesh.cols(), 1) = mesh;
我需要复制值,而不仅仅是映射。
由于您没有弄清楚,所以我推测您可能已经犯了三个可能的错误:
您的mesh
VectorXd
实际上是一个VectorXd
,但是它总是只有一列,但可能有多行,即,您需要编写:
Eigen::VectorXd::Map(r, mesh.rows()) = mesh;
或者您的mesh
是RowVectorXd
(即具有一行和多列)。 然后,您需要编写:
Eigen::RowVectorXd::Map(r, mesh.cols()) = mesh;
如果mesh
实际上是一个矩阵,则需要决定如何将其映射到线性内存(即行占主导或列占主导)。 使用Map
也可以:
Eigen::MatrixXd::Map(r, mesh.rows(), mesh.cols()) = mesh;
您实际上不必复制任何内容。 您可以使用.data()
成员函数访问原始数据。
#include <Eigen/Core>
int main()
{
Eigen::VectorXd mesh = Eigen::VectorXd::Random(10);
double * r = mesh.data();
r[5] = 0; // writes to mesh directly
assert(mesh(5) == 0);
}
如果要将数据复制到指针,则必须分配内存,执行复制并在使用后取消分配。
#include <algorithm>
#include <Eigen/Core>
int main()
{
Eigen::VectorXd mesh = Eigen::VectorXd::Random(10);
double * r = new double[mesh.size()];
std::copy(mesh.data(), mesh.data() + mesh.size(), r);
assert(r[5] == mesh(5));
delete[] r;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.