我可以将特征值定义的变量与函数neighbor_difference一起使用吗?

时间:2019-07-11 20:44:00

标签: c++ eigen

全部,在此先感谢您的任何评论和建议!

我用C ++的特征库定义了一个双精度数组,然后我想使用C ++的数值库的next_difference,我发现我不能将该函数用于在特征库下定义的变量。

两个库之间是否存在冲突?基本上,我想使用特征库的特征空间的LinSpaced函数和数值库的neighbor_difference函数。当然,我更喜欢将本征库保留在代码中。

import cats.syntax.show._

错误消息表明“没有重载函数的实例与参数列表匹配”。

1 个答案:

答案 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