Eigen::ArrayXXd
时间: 2025-05-30 09:25:43 浏览: 18
### 使用 `Eigen::ArrayXXd` 类型
#### 创建和初始化 `ArrayXXd`
为了创建并初始化一个双精度浮点类型的数组,可以使用如下方式:
```cpp
#include <iostream>
#include <Eigen/Dense>
using namespace Eigen;
int main() {
// 定义一个 2x3 的 double 类型的 Array 并全部赋值为0
ArrayXXd array_23 = ArrayXd::Zero(2 * 3).reshaped(2, 3);
std::cout << "An array with all elements equal to zero:\n"
<< array_23 << "\n\n";
// 或者直接指定大小并初始化特定值
ArrayXXd array_direct(2, 3);
array_direct << 1.1, 2.2, 3.3,
4.4, 5.5, 6.6;
std::cout << "A directly initialized array:\n"
<< array_direct << "\n";
return 0;
}
```
上述代码展示了两种不同的方法来定义二维数组 `ArrayXXd`[^1]。
#### 执行算术运算
当涉及到元素级别的加减乘除时,可以直接利用重载的操作符来进行计算。下面的例子说明了这一点:
```cpp
#include <iostream>
#include <Eigen/Dense>
using namespace Eigen;
int main(){
ArrayXXd first_array(2, 2), second_array(2, 2);
first_array << 1.0, 2.0,
3.0, 4.0;
second_array << 2.0, 0.5,
1.0, 0.75;
// 加法
ArrayXXd sum = first_array + second_array;
std::cout << "Sum of two arrays:\n" << sum << "\n\n";
// 减法
ArrayXXd difference = first_array - second_array;
std::cout << "Difference between two arrays:\n" << difference << "\n\n";
// 逐元素除法
ArrayXXd division = first_array / second_array;
std::cout << "Element-wise division result:\n" << division << "\n\n";
// 逐元素乘法
ArrayXXd multiplication = first_array * second_array;
std::cout << "Element-wise multiplication result:\n" << multiplication << "\n";
return 0;
}
```
这段程序演示了如何对两个相同尺寸的 `ArrayXXd` 实例应用基本的四则运算[^2]。
#### 数组与矩阵之间的转换
有时候可能需要将在 `Array` 中完成的数据传递给某个期望接收 `Matrix` 参数的函数,这时就需要进行相互间的转换:
```cpp
#include <iostream>
#include <Eigen/Dense>
using namespace Eigen;
int main(){
ArrayXXd my_array(2, 2);
my_array << 1.0, 2.0,
3.0, 4.0;
// 将 Array 转换为 Matrix
MatrixXd matrix_from_array = my_array.matrix();
// 反之亦然
ArrayXXd array_from_matrix = matrix_from_array.array();
std::cout << "Converted from an array to a matrix and back again.\nOriginal array:\n"
<< my_array << "\nAfter conversion:\n" << array_from_matrix << "\n";
return 0;
}
```
这里介绍了怎样方便地在这两者之间切换,以便于根据不同场景下的需求灵活处理数据。
阅读全文
相关推荐














