2

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

例如; 我想采用sin()uBLAS 向量的所有元素。在 Boost、GSL 或任何其他数值库中是否有优化的方法来执行此操作,而不是简单地循环遍历向量的元素?

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

4

2 回答 2

1

最接近 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()或类似的)

于 2011-08-15T10:13:48.363 回答
1

您的向量(根据this)支持正常的向量操作,只需使用标准算法。就您而言,这里有一些帮助(全部在里面<algorithm>):

  • 对于正弦运算,使用std::transformwith sineffrom<cmath>
  • 对于旋转,(我假设矢量旋转,而不是角旋转)std::rotate
  • 删除重复项,std::unique排序后使用,删除未使用的元素。
  • 用零填充更多的是输出操作 - 您不会在向量上执行该操作
于 2011-08-15T10:24:14.570 回答