在Eigen中,带
ArrayXXf a;
a = ArrayXXf::Random(1000, 10000);
做
a = a.pow(4);
在我的电脑上需要约500毫秒,而
a = a.square().square();
只需要大约5毫秒。我正在发布最新的GCC。
这是预期的行为还是我做错了什么?我希望,至少对于小整数(例如< 20,如果不使用成本函数),应该存在捕获这种情况的重载。
答案 0 :(得分:0)
使用C ++ 17 if constexpr
这可能是可能的,但不是这样。目前,a.pow(x)
相当于为每个std::pow(a[i],x)
调用i
。