本征:小整数指数缓慢的系数式 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)
在 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)