对Boost::uBLAS向量执行STL操作
Performing STL operations on Boost::uBLAS vectors
如何将函数映射到uBLAS中向量的每个元素(如Mathematica中的map [])?
例如;我想取一个uBLAS向量中所有元素的sin()
。在Boost、GSL或任何其他数值库中是否有一种优化的方法来做到这一点,而不是简单地循环遍历向量的元素?
另外,我如何对uBLAS向量执行其他高级操作,例如旋转,删除重复项或用零填充等?
您的向量(根据此)支持正常的向量操作,只需使用标准算法。在您的情况下,这里有一些帮助(都在<algorithm>
中):
- 对于正弦操作,使用
std::transform
和<cmath>
中的 - 对于旋转,(我假设矢量旋转,而不是角度旋转)
std::rotate
. - 删除重复项,排序后使用
std::unique
,删除未使用的元素。 - 用零填充更多的是一个输出操作-你不会在矢量 上执行这个操作
sinef
与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()
或类似)
相关文章:
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么这个运算符<重载函数对 STL 算法不可见?
- STL 用户定义的二进制操作
- 如何在不进行内存操作的情况下在 C++ 和 STL 中定义 2D 数组
- C++结构上的 Stl 向量操作
- 使用指向 STL 映射的指针的操作
- STL 向量上的重复操作是否允许"Inherent Parallelism"/改进的内存访问?
- C++ STL容器集和多集:不同返回类型的插入操作
- 使用STL算法进行矢量操作
- 对于stl容器来说,end()可能是一个代价高昂的操作
- C++STL堆栈弹出操作导致分段错误
- 每个C++STL收集操作的算法效率
- STL结构:"insert if not present"操作?
- 使用c风格数组作为STL字符串操作的后端
- 是否存在STL或BOOST映射,如查找和弹出操作的容器
- 对Boost::uBLAS向量执行STL操作
- boost是否有比STL更简单的用于集合操作的数据类型?
- 是否有任何支持以下操作的提升/stl 容器
- 用于操作每个令牌的字符串分析(无 STL)