我试图使用Eigen库计算向量的元素自然对数,这是我的代码:
#include <Eigen/Core>
#include <Eigen/Dense>
void function(VectorXd p, VectorXd q) {
VectorXd kld = p.cwiseQuotient(q);
kld = kld.log();
std::cout << kld << std::endl;
}
但是在编译时
g -I eigen_lib -std = c 11 -march = native test_eigen.cpp -o test_eigen
我明白了
test_eigen.cpp:15:23:错误:无效使用不完整类型’const类Eigen :: MatrixLogarithmReturnValue< Eigen :: Matrix< double,-1,1> >’kld = kld.log();
我错过了什么?
解决方法:
VectorXd :: log()是MatrixBase< ...> :: log(),它计算方阵的矩阵对数.如果您需要以元素为单位的对数,则需要使用数组功能:
kld = kld.array().log();
// or:
kld = log(kld.array());
如果所有操作都是按元素进行的,请考虑使用ArrayXd而不是VectorXd:
void function(const Eigen::ArrayXd& p, const Eigen::ArrayXd& q) {
Eigen::ArrayXd kld = log(p/q);
std::cout << kld << std::endl;
}