c++11 - 向量的分段平方,C++ Eigen 中两个向量的分段乘积

标签 c++11 vector eigen square piecewise

假定 va 是具有 n 维的 Eigen::VectorXd 向量,我想进行以下分段操作:

  • va 的分段乘法,即向量 (a[1]*v[1], ..., a [n]*v[n]), 和
  • v 的分段平方,即向量 (v[1]*v[1], ..., v[n]*v[n])

Eigen是否提供了上述操作的方法,还是需要我自己手动实现?当然有非常简单的,但我希望它们运行得尽可能快。

最佳答案

为了处理诸如您的问题之类的元素明智的操作,Eigen 提供了 Array类(class)。因此,要执行您询问的操作,您可以将逐点积写为:

c = a.array() * v.array(); // Long version
c = a.cwiseProduct(v);     // Short(er) version

对于你拥有的正方形:

s = v.array().square();    // Probably what you want to use
s = v.array().abs2();      // Two operations: abs() then square()
s = v.cwiseAbs2();         // Same as above

使用 VectorXd 作为数组不会产生副本,因此效率很高。

关于c++11 - 向量的分段平方,C++ Eigen 中两个向量的分段乘积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34373757/

相关文章:

c++ - 如果复制列表初始化允许显式构造函数会出现什么问题?

c++ - Variadic 可变模板模板参数

C++11 运算符""带双参数

c++ - 从vector中删除元素,vector被struct填充

arrays - 如何返回动态特征数组

c++ - 插入已排序的 vector<unique_ptr<pair<>>> 时避免堆分配

c++ - 字符串 vector 输入和查询操作

arrays - 将特定元胞数组元素转换为数组

c++ - 在 cv::Mat 和 Eigen::Matrix 之间转换矩阵

c++ - 如何将 Eigen C++ 3.2.0 在线文档归档到单个 mht 中?