gpt4 book ai didi

c++ - Eigen 中的正确索引

转载 作者:行者123 更新时间:2023-11-27 22:42:03 25 4
gpt4 key购买 nike

假设我有一个 Matrix <float, Dynamic, Dynamic, RowMajor> AEigen .当我编写以下代码时:

cout << "Number of Columns of A is: "<< A.cols() << endl;
cout << "Number of Rows of A is: "<< A.rows() << endl;

我得到以下结果:

Number of Columns of A is: 129
Number of Rows of A is: 600

根据以上结果,我预计当我编写以下代码时,我会得到 Exception Error但这并没有发生,它打印了一个值!!!为什么??!!

cout << A(500,140);

最佳答案

如 Eigen 文档中所述,可以通过 m(i,j)m.coeff(i,j)/m 访问矩阵系数.coeffRef(i,j)(加上 m[i]m.x(),... 用于特殊 vector 情况)。

现在,'m(i,j)' 变体范围检查除非 NDEBUGEIGEN_NO_DEBUG 宏被定义。通常,前一个宏是为“发布”版本定义的,因此在这种情况下不会执行范围检查。理由是 Eigen 是一个面向性能的库,检查是有成本的,因此启用它们仅用于调试目的是有意义的。

永远不会检查 m.coeff(i,j) 形式。

当不执行检查时,任何调用超出范围的系数访问器的尝试都是前提条件违反,这意味着行为未定义。

一般来说,您应该尽量减少索引访问的使用,以支持更高级别的 block /线性代数运算(Eigen 有很多);您的代码将变得更紧凑、更易读(嗯,至少对于具有代数意识的读者而言)、更正确(越界访问的风险更小)并且(可能)更快。

关于c++ - Eigen 中的正确索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48110287/

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