本征矩阵[值],什么意思?
Eigen Matrix[value], what does it mean?
在 C++ 中使用 Eigen 库编写以下示例:
#include <iostream>
#include <eigen3/Eigen/Core>
using namespace Eigen;
using namespace std;
int main()
{
Matrix3f mat;
Matrix3f m[11];
cout << mat << endl;
cout << "\n" << m[11] << endl;
}
第一个cout
输出:
-37392.8 4.57244e-41 -37378.8
4.57244e-41 -37206.4 4.57244e-41
-37223.2 4.57244e-41 8.40779e-45
第二个输出:
0 -2.51418e-31 0
2.96401e+17 -1.10025e+33 2.9625e+17
3.06324e-41 0 3.06324e-41
[ ]
运算符是做什么的?
mat[value]
与 mat
有何不同?
另一个问题 :p 为什么 Eigen 生成非常大或非常小的数字,它们是随机的吗?
P.S:在第二个输出中,零始终为零,但其他数字在变化
宣言
Matrix3f m[11];
与Eigen
没有太大关系。它是堆栈上的一个普通原始数组,有 11 个 Eigen::Matrix3f
实例。当你
cout << "\n" << m[11] << endl;
这是未定义的行为,因为您有一个越界索引。 m
总共有 11 个元素,由于 C++ 中的索引从 0 开始,因此 m
中最后一个有效对象是 m[10]
。未定义的行为意味着您的程序可以做任何事情 - 因此您不应尝试解释这些结果。
也就是说,第一个 cout
部分很可能不受以下 UB 的影响。它显示了 Eigen
矩阵的未初始化值。
这不是 operator[]
。这是一个 C 风格的数组。
int a[42];
定义了一个包含 42 个 int
的数组,名为 a
.
在同一行,对于类型T
和正整数N
,这个:
T bla[N];
定义 N
个类型为 T
的对象的数组。
所以你的代码
Matrix3f m[11];
定义了一个包含 11 个 Matrix3f
个对象的数组。
数组索引从 0 开始,因此最后一个有效索引是 10,而不是代码中的 11。
由于 Eigen 没有对其对象进行零初始化,因此在打印第 0-10 个元素的值时会得到随机数。
在 C++ 中使用 Eigen 库编写以下示例:
#include <iostream>
#include <eigen3/Eigen/Core>
using namespace Eigen;
using namespace std;
int main()
{
Matrix3f mat;
Matrix3f m[11];
cout << mat << endl;
cout << "\n" << m[11] << endl;
}
第一个cout
输出:
-37392.8 4.57244e-41 -37378.8
4.57244e-41 -37206.4 4.57244e-41
-37223.2 4.57244e-41 8.40779e-45
第二个输出:
0 -2.51418e-31 0
2.96401e+17 -1.10025e+33 2.9625e+17
3.06324e-41 0 3.06324e-41
[ ]
运算符是做什么的?
mat[value]
与 mat
有何不同?
另一个问题 :p 为什么 Eigen 生成非常大或非常小的数字,它们是随机的吗?
P.S:在第二个输出中,零始终为零,但其他数字在变化
宣言
Matrix3f m[11];
与Eigen
没有太大关系。它是堆栈上的一个普通原始数组,有 11 个 Eigen::Matrix3f
实例。当你
cout << "\n" << m[11] << endl;
这是未定义的行为,因为您有一个越界索引。 m
总共有 11 个元素,由于 C++ 中的索引从 0 开始,因此 m
中最后一个有效对象是 m[10]
。未定义的行为意味着您的程序可以做任何事情 - 因此您不应尝试解释这些结果。
也就是说,第一个 cout
部分很可能不受以下 UB 的影响。它显示了 Eigen
矩阵的未初始化值。
这不是 operator[]
。这是一个 C 风格的数组。
int a[42];
定义了一个包含 42 个 int
的数组,名为 a
.
在同一行,对于类型T
和正整数N
,这个:
T bla[N];
定义 N
个类型为 T
的对象的数组。
所以你的代码
Matrix3f m[11];
定义了一个包含 11 个 Matrix3f
个对象的数组。
数组索引从 0 开始,因此最后一个有效索引是 10,而不是代码中的 11。 由于 Eigen 没有对其对象进行零初始化,因此在打印第 0-10 个元素的值时会得到随机数。