首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对Boost::uBLAS向量执行STL操作

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

Stack Overflow用户
提问于 2011-08-15 18:01:01
回答 2查看 817关注 0票数 2

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

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-15 18:24:15

你的向量(根据this)支持正常的向量操作,只需使用标准算法即可。在您的例子中,这里有一些帮助(都在<algorithm>中):

对于正弦操作,使用来自<cmath>

  • std::transform sinef进行旋转,(我假设是矢量旋转,而不是角度旋转) std::rotate.
  • Deleting重复,在排序后使用std::unique,删除未使用的带零的

更多的是一种输出操作-您不会对向量代码<代码>F216执行该操作

票数 1
EN

Stack Overflow用户

发布于 2011-08-15 18:13:48

与map最接近的等价物是std::transform

代码语言:javascript
复制
#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));
}

对于重复数据消除:

代码语言:javascript
复制
#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 vector有begin()end()或类似的东西)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7063707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档