gpt4 book ai didi

c++11 - 如何使用 Eigen 的逐元素整数幂

转载 作者:行者123 更新时间:2023-12-05 05:10:34 24 4
gpt4 key购买 nike

我想使用 Eigen 幂函数获取 double 数组和 int 数组的元素级幂。

这是使用 Eigen v3.3.4 和 v3.3.7 重现问题的示例代码:

#include <Eigen/Dense>

int main() {
Eigen::ArrayXd x(10);
Eigen::ArrayXd res(10);
Eigen::ArrayXi exponents(10);
x = Eigen::ArrayXd::Random(10);
exponents = Eigen::ArrayXi::LinSpaced(10, 0, 9);
res = Eigen::pow(x, exponents);

return (0);
}

错误信息很长,但本质上我明白了

YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY

在这种情况下,这对我来说似乎不合适,还有

Eigen3/Eigen/src/Core/functors/BinaryFunctors.h:294:84: error: no type named ‘ReturnType’ in ‘struct Eigen::ScalarBinaryOpTraits<double, int, Eigen::internal::scalar_pow_op<double, int> >’
typedef typename ScalarBinaryOpTraits<Scalar,Exponent,scalar_pow_op>::ReturnType result_type;

最佳答案

如错误消息所示,您不能隐式混合标量类型。您必须显式转换以使类型匹配:

res = Eigen::pow(x, exponents.cast<double>());

对于整数类型的特化,幂函数(作为仿函数)的模板是:

template<typename ScalarX,typename ScalarY, bool IsInteger = 
NumTraits<ScalarX>::IsInteger&&NumTraits<ScalarY>::IsInteger>

并调用简单的 pow(x,y) 除非两种类型都是整数 (IsInteger),在这种情况下有不同的特化。

数组还有常量幂的重载,这似乎不是您要查找的内容。在那种情况下(除非 ggael 纠正我),你绝对可以实现你自己的 CustomBinaryOp

关于c++11 - 如何使用 Eigen 的逐元素整数幂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56479530/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com