gpt4 book ai didi

c++ - 初始化动态矩阵时的特征错误

转载 作者:搜寻专家 更新时间:2023-10-31 02:03:54 24 4
gpt4 key购买 nike

我正在尝试从包含一些简单的笛卡尔点结构的 vector 中填充特征矩阵(动态行,2 列, double 矩阵),但是,在使用运算符时出现错误 << .

最小失败示例(使用 MSVC 2017):

#include <Eigen/Dense>
#include <vector>

struct point {
double x, y;
};

int main() {

std::vector<point> points = {
point{0.0, 0.0},
point{0.5, 0.0},
point{0.0, 1.0},
point{0.5, 1.0},
};

typedef Eigen::Matrix<double, Eigen::Dynamic, 2> CoordMatrix;
CoordMatrix X;

for (auto& p : points)
X << p.x, p.y;

return 0;
}

运行此程序时,我在 X << point.x, point.y; 行中收到错误说:“没有运算符 << 匹配这些操作数”(在 Debug模式下尝试传递 X << 0.0, 0.0; 时也会抛出)。

最佳答案

据我了解,您正在尝试使用每行中的值初始化 X 矩阵,其中包含先前 vector 中的一个点的坐标。你不能那样做,请参阅 here :

Eigen offers a comma initializer syntax which allows the user to easily set all the coefficients of a matrix, vector or array. Simply list the coefficients, starting at the top-left corner and moving from left to right and from the top to the bottom. The size of the object needs to be specified beforehand. If you list too few or too many coefficients, Eigen will complain.

上面清楚地说明了您的右手边需要与左手边的尺寸相匹配。在您的情况下,您可能需要逐个元素地复制 vector 。像这样的东西:

CoordMatrix X(points.size(), 2); // reserving rigth storage for the matrix
for (auto i = 0u; i < points.size(); ++i) {
X(i, 0) = points[i].x;
X(i, 1) = points[i].y;
}

关于c++ - 初始化动态矩阵时的特征错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54626315/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com