如何将函数映射到uBLAS中矢量的每个元素(如Mathematica中的Map [])?
例如;我想取一个uBLAS向量的所有元素的sin()
。在Boost,GSL或任何其他数值库中是否有一种优化的方法可以做到这一点,而不是简单地循环遍历向量的元素?
另外,我如何对uBLAS向量执行其他高级操作,例如旋转,删除重复项或用零填充等等?
答案 0 :(得分:1)
与地图最接近的是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 vector有begin()
和end()
或类似的)
答案 1 :(得分:1)
您的矢量(根据this)支持常规矢量操作,只需使用标准算法。在您的情况下,这里有一些帮助(全部在<algorithm>
内):
std::transform
sinef
<cmath>
std::rotate
。std::unique
,删除未使用的元素。