// 下面是对Eigen阵的操作// 输入数据(初始化)matrix_23 << 1, 2, 3, 4, 5, 6;// 输出cout << "matrix 2x3 from 1 to 6: \n" << matrix_23 << endl;// 用()访问矩阵中的元素cout << "print matrix 2x3: " << endl;for (int i = 0; i < 2; i++) {for (int j = 0; j < 3; j++) cout << matrix_23(i, j) << "\t";cout << endl;}
以上代码是对 Eigen 矩阵的操作 , 具体内容如下:
1 2 34 5 6
matrix 2x3 from 1 to 6: 1 2 34 5 6
print matrix 2x3: 1 2 3 4 5 6
// 矩阵和向量相乘(实际上仍是矩阵和矩阵)v_3d << 3, 2, 1;vd_3d << 4, 5, 6;// 但是在Eigen里你不能混合两种不同类型的矩阵 , 像这样是错的// Matrix
这段代码是演示如何对矩阵和向量进行乘法运算 。在Eigen中 , 矩阵和向量相乘仍然是矩阵和矩阵相乘 。首先 , 定义了两个向量v_3d和vd_3d , 然后使用cast()方法将矩阵中的元素转换为类型 , 与v_3d向量相乘 , 得到向量 。然后 , 矩阵与vd_3d向量相乘 , 得到向量 。最后 , 使用()方法将向量转置 , 以便于输出 。需要注意的是 , 在Eigen中 , 不同类型的矩阵和向量不能混合相乘 , 需要进行类型转换 。
矩阵的数据类型为 , 向量 v_3d 的数据类型为 , 这两个类型是不同的 。在 Eigen 中 , 对于矩阵乘法操作 , 两个矩阵的数据类型必须相同 , 否则编译器将会报错 。
在这种情况下 , 需要将的数据类型显式地转换为 , 这样才能与向量 v_3d 相乘 。具体做法是使用 cast 函数将中的每个元素转换为类型 。因此正确的写法是:= .cast() * v_3d;???????
.cast()可以将矩阵中的元素类型转换为类型 , 因为矩阵是类型的 , 其中元素类型是float , 而向量v_3d是类型的 , 其中元素类型是 , 两者不同类型的矩阵和向量不能直接相乘 。
因此 , 需要使用cast方法将矩阵中的元素类型转换为 , 得到一个类型的矩阵 , 才能和类型的向量v_3d相乘 。
在代码中 , v_3d 是类型的向量 , 元素类型是 , 而 vd_3d 是类型的向量 , 元素类型是 float 。
// 同样你不能搞错矩阵的维度// 试着取消下面的注释 , 看看Eigen会报什么错// Eigen::Matrix
是一个类型的矩阵 , v_3d 是一个类型的向量 。这两者可以相乘 , 因为它们的维度匹配 , 但是得到的结果需要是一个类型的矩阵 。
=* v_3d 的问题在于 , 左侧矩阵的维度是不匹配的 。
文章插图
// 一些矩阵运算// 四则运算就不演示了 , 直接用+-*/即可 。matrix_33 = Matrix3d::Random();// 随机数矩阵cout << "random matrix: \n" << matrix_33 << endl;cout << "transpose: \n"
- 后人是怎样用二十四字评价袁世凯时代的
- 李世民的十四个儿子分别是谁?又有什么结局
- 二十四 计算机网络UDP及TCP首部的格式
- 解密:二十四史中《晋书》是如何被编撰成书的?
- 荆轲死后好友高渐离继续刺秦因视觉差失败被杀
- 三十六解二十四厄,谁看过七元解厄系列+番外
- 割据江南十四年的太平天国导致多少人死亡
- 人类的视觉原理
- 处暑节气由来:二十四节气中处暑有何传统习俗
- 孝恭仁皇后很有心机吗孝恭仁皇后为何爱十四子