我可以将特征定义的变量与函数adjacent_difference一起使用吗?
Can I use Eigen-defined variable with the function adjacent_difference?
所有,提前感谢您的任何意见和建议!
我用 C++ 的特征库定义了一个双精度数组,然后我想使用 C++ 的数字库的adjacent_difference,我发现我不能将该函数用于在特征库下定义的变量。
是两个库之间的冲突吗?基本上,我想使用特征库的 LinSpaced 函数和数字库的 adjacent_difference 函数。当然,我更喜欢将特征库保留在代码中。
//not use Eigen defined variables
double a[] = { 1,3,4,7 }, b[4];
adjacent_difference(a,a+4,b);
for (int i = 0; i < 4; i++)
cout << b[i] << endl;
//use Eigen defined variables
ArrayXd a1(4), b1(4);
a1 << 1, 3, 4, 7;
adjacent_difference(a1, a1 + 4, b1);
for (int i = 0; i < 4; i++)
cout << b1[i] << endl;
错误消息显示"没有重载函数的实例与参数列表匹配"。
首先,您可以使用 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
相关文章:
- Difference in displaying cv2 Mat
- 如何将enable-if与模板参数和参数包一起使用
- 如何将PERF_AMPLE_READ与mmap一起使用
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 如何将C++中的库和头与MinGW一起使用
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 为什么我不能将 rand() 与数组的大小一起使用?
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- 不能将复制初始化与隐式转换的多个步骤一起使用
- 将fold表达式与std::一起用于两个元组
- spdlog标头仅与外部fmt一起使用.spdlog错误:'内部':不是'fmt'
- 将 std::allocate_shared 与多态资源分配器一起使用
- 为什么常量词在重载运算符中不与 ostream 对象一起使用<<?
- 将 OpenCV 与 CMAKE 中的项目一起构建为第三方库的正确方法
- 将 exprtk 与自定义类的对象一起使用
- 将 std::set 与基于键的比较器一起使用
- 将 C++ 类与 Rcpp 一起使用,从 C 或 R 修改它
- 如何将 Eigen::Ref 与 pybind11 一起使用?
- 如何将AERT_Allocate与 std:vector 一起使用
- 如何使我的 sizeof sum 结构与空参数包一起工作