我正在尝试使用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
我错过了什么?
答案 0 :(得分:4)
要对特征对象(Matrix
或Vector
)进行逐元素操作,您需要指定它。这可以通过将.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;
}