有没有一个简单快速的方法来计算特征3中两个3x3矩阵之间的Frobenius内积?
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,这可以用来定义弗罗贝尼乌斯内积。
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; }
xdnvmnnf3#
我认为你在寻找一个普通的矩阵乘法
Eigen::Matrix3d a; Eigen::Matrix3d b; Eigen::Matrix3d product = a * b;
3条答案
按热度按时间6ss1mwsb1#
我知道我来晚了,但这个可能有用。
您可以将矩阵Map为向量,并计算所述向量之间的内积(如果您处理复值矩阵,它也可以工作)。
Map允许你重新解释你的矩阵作为向量没有复制,它相当于Vectorization operator,这可以用来定义弗罗贝尼乌斯内积。
6za6bjd02#
如果您正在搜索inner product of matrices,可能的(可能不是最佳的)解决方案可能是
xdnvmnnf3#
我认为你在寻找一个普通的矩阵乘法