Zed*_*edd 7 c++ linear-algebra eigen
有一个简单的方法来评估的2个矩阵列明智的点积(让我们称之为A和B,类型Eigen::MatrixXd),它们的尺寸mxn,不评估A*B或无需诉诸for循环?得到的矢量需要具有1xn或的尺寸nx1.另外,我正在尝试用C++中的Eigen做到这一点
gga*_*ael 10
有很多方法可以实现这一点,所有方法都执行延迟评估:
res = (A.array() * B.array()).colwise().sum();
res = (A.cwiseProduct(B)).colwise().sum();
Run Code Online (Sandbox Code Playgroud)
而我最喜欢的:
res = (A.transpose() * B).diagonal();
Run Code Online (Sandbox Code Playgroud)
这是我如何使用Eigen::Map(假设真实矩阵,可以通过伴随矩阵扩展到复数)来做到这一点,其中rows和cols表示行/列数:
#include <Eigen/Dense>
#include <iostream>
int main()
{
Eigen::MatrixXd A(2, 2);
Eigen::MatrixXd B(2, 2);
A << 1, 2, 3, 4;
B << 5, 6, 7, 8;
int rows = 2, cols = 2;
Eigen::VectorXd vA = Eigen::Map<Eigen::VectorXd>(
const_cast<double *>(A.data()), rows * cols, 1);
Eigen::VectorXd vB = Eigen::Map<Eigen::VectorXd>(
const_cast<double *>(B.data()), rows * cols, 1);
double inner_prod = (vA.transpose() * vB).sum();
std::cout << inner_prod << std::endl;
}
Run Code Online (Sandbox Code Playgroud)