特征矩阵[value],是什么意思?



在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。S:在第二个输出中,0始终是0,但其他数字在变化

声明

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];

定义了一个类型为TN对象数组。

所以你的代码
Matrix3f m[11];

定义一个包含11个Matrix3f对象的数组。

数组索引从0开始,所以最后一个有效索引是10,而不是代码中的11。由于Eigen没有对其对象进行零初始化,因此在打印0-10个元素的值时将得到随机数。

相关内容

  • 没有找到相关文章

最新更新