全部,在此先感谢您的任何评论和建议!
我用C ++的特征库定义了一个双精度数组,然后我想使用C ++的数值库的next_difference,我发现我不能将该函数用于在特征库下定义的变量。
两个库之间是否存在冲突?基本上,我想使用特征库的特征空间的LinSpaced函数和数值库的neighbor_difference函数。当然,我更喜欢将本征库保留在代码中。
import cats.syntax.show._
错误消息表明“没有重载函数的实例与参数列表匹配”。
答案 0 :(得分:0)
首先,您可以使用Eigen的内置功能轻松计算相邻差,例如:
void adjacent_diff_eigen(Eigen::ArrayXf const& A, Eigen::ArrayXf& B)
{
Eigen::Index n = A.size();
B.resize(n);
if(n == 0) return;
B[0] = A[0];
B.tail(n-1) = A.tail(n-1) - A.head(n-1);
}
与std
方法相反,这也应该进行矢量化处理(除非禁用了未对齐的矢量化处理)。
此外,在Eigen的开发分支中,您还可以使用类似std的迭代器,如下所示:
void adjacent_diff_std(Eigen::ArrayXf const& A, Eigen::ArrayXf& B)
{
B.resizeLike(A);
std::adjacent_difference(A.begin(), A.end(), B.begin());
}
对于较早的Eigen版本,您可以通过直接访问数据来解决:
std::adjacent_difference(A.data(), A.data()+A.size(), B.data());
godbolt上的现场演示:https://godbolt.org/z/qbkagM