c++ 特征3中两个矩阵的Frobenius内积

bweufnob  于 2023-02-01  发布在  其他
关注(0)|答案(3)|浏览(194)

有没有一个简单快速的方法来计算特征3中两个3x3矩阵之间的Frobenius内积?

6ss1mwsb

6ss1mwsb1#

我知道我来晚了,但这个可能有用。
您可以将矩阵Map为向量,并计算所述向量之间的内积(如果您处理复值矩阵,它也可以工作)。

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

Map允许你重新解释你的矩阵作为向量没有复制,它相当于Vectorization operator,这可以用来定义弗罗贝尼乌斯内积。

6za6bjd0

6za6bjd02#

如果您正在搜索inner product of matrices,可能的(可能不是最佳的)解决方案可能是

#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;
    }
xdnvmnnf

xdnvmnnf3#

我认为你在寻找一个普通的矩阵乘法

Eigen::Matrix3d a;
Eigen::Matrix3d b;

Eigen::Matrix3d product = a * b;

相关问题