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

我试图使用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;
}
上一篇:git clone下载代码,中途断掉怎么办?


下一篇:c-CUDA和本征成员“已被声明”错误