如何将一个函数映射到uBLAS中向量的每个元素(就像Mathematica中的Map[]一样)?
例如,我想获取一个uBLAS向量的所有元素的sin()。在Boost、GSL或任何其他数值库中,有没有一种优化的方法来实现这一点,而不是简单地循环遍历向量的元素?
另外,如何在uBLAS向量上执行其他高级操作,如旋转、删除重复项或用零填充等?
发布于 2011-08-15 18:24:15
你的向量(根据this)支持正常的向量操作,只需使用标准算法即可。在您的例子中,这里有一些帮助(都在<algorithm>中):
对于正弦操作,使用来自<cmath>
std::transform sinef进行旋转,(我假设是矢量旋转,而不是角度旋转) std::rotate.std::unique,删除未使用的带零的更多的是一种输出操作-您不会对向量代码<代码>F216执行该操作
发布于 2011-08-15 18:13:48
与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 vector有begin()和end()或类似的东西)
https://stackoverflow.com/questions/7063707
复制相似问题