use*_*386 1 c++ boost sparse-matrix
我有一个以下列格式读取数据的程序:
Row Column Value
1 1 4
1 3 5
2 1 6
...
Run Code Online (Sandbox Code Playgroud)
其中前两列引用矩阵的索引,值列包含存储在矩阵中该(坐标,列)坐标的值.
如果我实际构造一个二维数组来表示矩阵,那么它将非常大,因为我的输入数据非常稀疏.相反,我想构建一个稀疏矩阵表示,它允许我查找对应于(行,列)对的值,如果它不存在则返回0.
似乎boost有办法做到这一点,但我找不到足够的文档来真正理解如何使用它.
我已经深入阅读了这些内容,但我仍然不确定如何处理:
http://www.guwi17.de/ublas/doc/html/ex__fill1_8cpp-source.html http://www.boost.org/doc/libs/1_39_0/libs/numeric/ublas/doc/matrix_sparse.htm
我是一个c ++新手,所以不确定如何使用boost从我的输入数据创建一个稀疏矩阵(假设我已经读过它).我也没有运气如何使用boost稀疏矩阵实际返回与(行,列)对相关的值.任何人都可以向我指出一些基本的例子,或解释我如何做到这一点?
感谢您提供任何帮助.
boost中有几种稀疏矩阵实现:( mapped_matrix由诸如关联容器支持std::map)compressed_matrix和coordinate_matrix(由可调整大小的数组支持).所有这些用法都是一样的.
以下是压缩矩阵的一些基础知识:
#include <iostream>
#include <sstream>
#include <boost/numeric/ublas/matrix_sparse.hpp>
namespace ublas = boost::numeric::ublas;
int main()
{
ublas::compressed_matrix<int> m(10, 10); // 10x10 compressed matrix
// replace by ifstream in("filename") in real code
std::istringstream in("1 1 4\n"
"1 3 5\n"
"2 1 6\n");
// read from stream
int val;
for(size_t r,c; in >> r >> c >> val; )
m(r,c) = val;
// print out
for(size_t i = 0; i < m.size1(); ++i)
{
for(size_t j = 0; j < m.size2(); ++j)
std::cout << m(i,j) << ' ';
std::cout << '\n';
}
// info on the storage
std::cout << "Non-zeroes: " << m.nnz() << '\n'
<< "Allocated storage for " << m.nnz_capacity() << '\n';
}
Run Code Online (Sandbox Code Playgroud)
在线演示:http://liveworkspace.org/code/2iCZuF
| 归档时间: |
|
| 查看次数: |
2306 次 |
| 最近记录: |