使用迭代器遍历boost::ublas矩阵
Traversing a boost::ublas matrix using iterators
我只想从头到尾遍历一个矩阵,触及每个元素。然而,我发现boost矩阵没有一个迭代器,而是有两个迭代程序,我还不知道如何使它们工作,以便您可以遍历整个矩阵
typedef boost::numeric::ublas::matrix<float> matrix;
matrix m1(3, 7);
for (auto i = 0; i < m1.size1(); i++)
{
for (auto j = 0; j < m1.size2(); j++)
{
m1(i, j) = i + 1 + 0.1*j;
}
}
for (auto itr1 = m1.begin1(); itr1!= m1.end1(); ++itr1)
{
for (auto itr2 = m1.begin2(); itr2 != m1.end2(); itr2++)
{
//std::cout << *itr2 << " ";
//std::cout << *itr1 << " ";
}
}
我的这段代码使用itr1只打印矩阵的第1行,使用itr2只打印矩阵中的第1列。可以做些什么来访问所有的行和列?
要迭代矩阵,迭代器2应该从迭代器1中提取,如下所示:
for(auto itr2 = itr1.begin(); itr2 != itr1.end(); itr2++)
完整代码:
#include <stdlib.h>
#include <boost/numeric/ublas/matrix.hpp>
using namespace boost::numeric::ublas;
using namespace std;
int main(int argc, char* argv[]) {
typedef boost::numeric::ublas::matrix<float> matrix;
matrix m1(3, 7);
for (auto i = 0; i < m1.size1(); i++) {
for (auto j = 0; j < m1.size2(); j++) {
m1(i, j) = i + 1 + 0.1*j;
}
}
for(matrix::iterator1 it1 = m1.begin1(); it1 != m1.end1(); ++it1) {
for(matrix::iterator2 it2 = it1.begin(); it2 !=it1.end(); ++it2) {
std::cout << "(" << it2.index1() << "," << it2.index2() << ") = " << *it2 << endl;
}
cout << endl;
}
return EXIT_SUCCESS;
}
输出:
(0,0) = 1
(0,1) = 1.1
(0,2) = 1.2
(0,3) = 1.3
...
相关文章:
- 封装提升 ublas 矩阵运算符 ()
- 插入Boost UBLAS矩阵MATLAB样式的数据
- boost::ublas如何得到int矩阵的行列式
- 如何在C++增强 ublas 中将文件流式传输到矩阵中
- 将Boost ublas矩阵写入文本文件
- 为什么uBLAS没有“运算符*(矩阵,向量)”
- 如何将元素插入具有动态大小的 ublas 矩阵中
- GDB 无法显示升压 uBLAS 矩阵?
- 如何将boost::numeric::ublas::vector复制到矩阵
- Boost uBLAS矩阵参考
- 使用迭代器遍历boost::ublas矩阵
- ublas:将ublas::vector包装为ublas:矩阵表达式
- 通过值返回boost ublas矩阵,仅在vs2012的发布配置中工作
- uBLAS矩阵清除内存
- boost::uBLAS如何处理矩阵的嵌套乘积
- Boost Ublas矩阵所有元素的平方根
- 什么是矩阵表达式和向量表达式类在Boost.uBLAS
- BOOST uBLAS矩阵产品速度极慢
- 如何在ublas::矩阵中查找项目的所有出现项
- Boost uBLAS矩阵/向量积