首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >强制Eigen在运行时检查矩阵维数

强制Eigen在运行时检查矩阵维数
EN

Stack Overflow用户
提问于 2019-03-25 03:21:38
回答 1查看 236关注 0票数 0

看起来Eigen并不检查动态矩阵的维数。例如,如果我执行以下代码:

代码语言:javascript
运行
复制
auto EA = Eigen::MatrixXf(3, 2);
auto EB = Eigen::MatrixXf(3, 2);
for (auto i = 0; i < 3; ++i)
{
  for (auto j = 0; j < 2; ++j)
  {
    EA(i,j) = i + j + 1;
    EB(i,j) = i + j + 1;
  }
}
auto EC = EA*EB;
std::cout << "EA: " << std::endl << EA << std::endl;
std::cout << "EB: " << std::endl << EB << std::endl;
std::cout << "EC: " << std::endl << EC << std::endl;

它输出:

代码语言:javascript
运行
复制
EA:
1 3
2 3
2 4
EB:
1 3
2 3
2 4
EC:
 7 12
 8 15
10 18

如何强制Eigen在运行时检查矩阵维度?对于初学者和调试人员来说,这将是非常有用的。

EN

Stack Overflow用户

回答已采纳

发布于 2019-03-25 03:30:58

只有在未定义NDEBUG宏时才会进行尺寸检查。这通常意味着调试版本。

没有NDEBUG的示例,其中检查成功中止程序:

代码语言:javascript
运行
复制
g++ test.cpp -o test -I /usr/include/eigen3 && ./test
test: /usr/include/eigen3/Eigen/src/Core/ProductBase.h:102: Eigen::ProductBase<Derived, Lhs, Rhs>::ProductBase(const Lhs&, const Rhs&) [with Derived = Eigen::GeneralProduct<Eigen::Matrix<float, -1, -1>, Eigen::Matrix<float, -1, -1>, 5>; Lhs = Eigen::Matrix<float, -1, -1>; Rhs = Eigen::Matrix<float, -1, -1>]: Assertion `a_lhs.cols() == a_rhs.rows() && "invalid matrix product" && "if you wanted a coeff-wise or a dot product use the respective explicit functions"' failed.
Aborted (core dumped)

NDEBUG

代码语言:javascript
运行
复制
g++ test.cpp -o test -I /usr/include/eigen3 -DNDEBUG && ./test
EA: 
1 2
2 3
3 4
EB: 
1 2
2 3
3 4
EC: 
 5  8
 8 13
11 18
票数 3
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55327602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档