特征向量对数误差无效使用不完全类型

时间:2017-06-20 10:54:16

标签: c++ c++11 eigen

我正在尝试使用Eigen库计算向量的元素自然对数,这是我的代码:

MediaFileOpener

但是在使用

进行编译时

#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

我错过了什么?

2 个答案:

答案 0 :(得分:4)

要对特征对象(MatrixVector)进行逐元素操作,您需要指定它。这可以通过将.array()添加到Matrix / Vector对象来完成,如下所示:

kld = kld.array().log();

请参阅此tutorial

P.S。 MatrixLogarithmReturnValue是矩阵函数unsupported modules的一部分。

答案 1 :(得分:4)

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