对Boost::uBLAS向量执行STL操作

Performing STL operations on Boost::uBLAS vectors

本文关键字:STL 操作 执行 uBLAS Boost 向量      更新时间:2023-10-16

如何将函数映射到uBLAS中向量的每个元素(如Mathematica中的map [])?

例如

;我想取一个uBLAS向量中所有元素的sin()。在Boost、GSL或任何其他数值库中是否有一种优化的方法来做到这一点,而不是简单地循环遍历向量的元素?

另外,我如何对uBLAS向量执行其他高级操作,例如旋转,删除重复项或用零填充等?

您的向量(根据此)支持正常的向量操作,只需使用标准算法。在您的情况下,这里有一些帮助(都在<algorithm>中):

  • 对于正弦操作,使用std::transform<cmath>
  • 中的sinef
  • 对于旋转,(我假设矢量旋转,而不是角度旋转)std::rotate .
  • 删除重复项,排序后使用std::unique,删除未使用的元素。
  • 用零填充更多的是一个输出操作-你不会在矢量
  • 上执行这个操作

与map最接近的是std::transform

#include <algorithm>
#include <functional>
#include <vector>
#include <cmath>
int main() {
   std::vector<float> values;
   values.push_back(0.5f);
   values.push_back(1.0f);
   std::transform(values.begin(), values.end(), values.begin(), std::ptr_fun(sinf));
}

重复数据删除:

#include <algorithm>
#include <vector>
#include <iostream>
#include <iterator>
int main() {
   std::vector<int> duplicates;
   duplicates.push_back(1);
   duplicates.push_back(3);
   duplicates.push_back(5);
   duplicates.push_back(1);
   std::sort(duplicates.begin(), duplicates.end());
   duplicates.erase(std::unique(duplicates.begin(), duplicates.end()), duplicates.end());
   std::copy(duplicates.begin(), duplicates.end(), std::ostream_iterator<int>(std::cout, "n"));
}

(我相信ublas向量有begin()end()或类似)