本征:小整数指数缓慢的系数式 pow

Eigen: coeficient-wise pow with smalll integer exponent slow

在 Eigen 中,

ArrayXXf a;
a = ArrayXXf::Random(1000, 10000);

正在做

a = a.pow(4);

在我的电脑上需要大约 500 毫秒,而

a = a.square().square();

只需要大约 5 毫秒。我正在使用最近发布的 GCC 进行编译。

这是预期的行为还是我做错了什么?我希望,至少对于小整数(比如 < 20,如果不使用成本函数),应该存在一个重载来捕捉这种情况。

使用 C++17 if constexpr 这可能是可能的,否则就不可能。所以目前,a.pow(x) 相当于为每个 i.

调用 std::pow(a[i],x)