特征3中两个矩阵之间的Frobenius内积



有没有一个简单快速的解决方案来计算Eigen3中两个3x3矩阵之间的Frobenius内积?

如果你正在搜索矩阵的内积,一个可能的(可能不是最优的(解决方案可能是

#include <iostream>
#include "Eigen/Dense"

int main()
{

Eigen::Matrix3d A, B;
A << 1, 2, 3,
4,5,6,
7,8,9;
B << 10, 11, 12,
13,14,15,
16,17,18;
Eigen::Matrix3d C;
C = A.transpose()*B;

std::cout << C.trace() << std::endl;
return 0;
}

我知道我参加聚会迟到了,但这可能有用。

你可以将矩阵映射到向量中,并计算这些向量之间的内积(如果你处理的是复值矩阵,这也适用(。

Eigen::Map<Eigen::VectorXd> vec_A(A.data(), A.cols()*A.rows());
Eigen::Map<Eigen::VectorXd> vec_B(B.data(), B.cols()*B.rows());
const double frob_inner = vec_A.dot(vec_B);

映射允许您无需复制即可将矩阵重新解释为向量,它相当于矢量化运算符,可用于定义Frobenius内积。

我认为您正在寻找一个正常的矩阵乘法

Eigen::Matrix3d a;
Eigen::Matrix3d b;
Eigen::Matrix3d product = a * b;

最新更新