对角矩阵的特征使用
Eigen use of diagonal matrix
本文关键字:特征 更新时间:2023-10-16
使用Eigen,我有一个Matrix3Xd(3行,n列)。我想得到所有列的平方范数
更清楚一点,假设我有
Matrix3Xd a =
1 3 2 1
2 1 1 4
我想得到每列的平方范数
squaredNorms =
5 10 5 17
我想利用矩阵计算,而不是自己通过 for 循环进行计算。
我以为是
squaredNorms = (A.transpose() * A).diagonal()
这有效,但我担心性能问题:当我只需要对角线时,A.transpose() * A
将是一个 nxn 矩阵(可能是数百万个元素)。
本征是否足够聪明,可以只计算我需要的系数? 在每列上实现平方范数计算的最有效方法是什么?
(A.transpose() * A).diagonal()
的情况由 Eigen 显式处理,以强制对嵌套在对角线视图中的产品表达式进行延迟计算。因此,将仅计算所需的n
对角线系数。
也就是说,正如埃里克所指出的那样,称呼A.colwise().squaredNorm()
更简单。
这将做你想要的。
squaredNorms = A.colwise().squaredNorm();
https://eigen.tuxfamily.org/dox/group__QuickRefPage.html
Eigen 提供了几种归约方法,例如:minCoeff() 、maxCoeff()、sum() 、prod()、trace() *、norm() *、squaredNorm() *、all() 和 any()。所有归约操作都可以按矩阵、按列或按行完成。
相关文章:
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- 特征::矩阵<双精度,1,3> 结构类型函数中的返回类型函数
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- 特征命名访问向量段
- 将特征矩阵的向量设置为0
- 特征:模板函数中矩阵的平面图
- basic_string的前导/尾部不区分空格的特征
- 特征 3 类的模板专用化
- 特征 c++:复矩阵的面积双曲正切(atanh)
- C++ 中的特征向量计算
- 根据C++标准的定义实现"is_similar"类型特征
- C++类型特征,以查看是否可以<uint32_t>对类型"K"的任何变量调用"static_cast(k)"
- 有没有办法找到特征矩阵系数的中值?
- 如何将高维数据映射到特征类型?
- 将平面阵列重塑为复杂的特征类型
- 特征 LLT 模块给出不正确的结果?
- 特征模板化函数和维度
- 特征稀疏向量:求最大系数
- 特征 3.3.x:如何在所有行中操作 lamba?
- 如何将向量断言到特征矩阵