【发布时间】:2018-02-21 17:03:16
【问题描述】:
我正在尝试使用c++ 中的boost 库创建一个对称矩阵n x n 矩阵并使用n*(n+1)/2 维数组填充它。
到目前为止,我能够创建矩阵,并使用以下代码用随机值填充它
#include <iostream>
#include <fstream>
#include </usr/include/boost/numeric/ublas/matrix.hpp>
#include </usr/include/boost/numeric/ublas/matrix_sparse.hpp>
#include </usr/include/boost/numeric/ublas/symmetric.hpp>
#include </usr/include/boost/numeric/ublas/io.hpp>
using namespace std;
int test_boost () {
using namespace boost::numeric::ublas;
symmetric_matrix<double, upper> m_sym (3, 3);
double filler[6] = {0, 1, 2, 3, 4, 5};
for (unsigned i = 0; i < m_sym.size1 (); ++ i)
for (unsigned j = i; j < m_sym.size2 (); ++ j)
m_sym (i, j) = filler[i+j*m_sym.size1()];
std::cout << m_sym << std::endl;
return 0;
}
我要做的是使用数组filler 中的值填充对称矩阵的上(或下)部分。所以输出的上对称矩阵应该是
| 0 | 1 | 2 |
------------------------------------------------
0 | 0 1 3
1 | 1 2 4
2 | 3 4 5
你知道怎么做吗?
【问题讨论】:
-
好吧,我想你已经准备好回答你自己的问题了。回答这个问题:
index必须是什么才能使以下内容正确:m_sym(i, j) = filler[index];? -
@YSC:非常感谢您的评论!这就是问题所在...我想不出办法...矩阵中的元素
00应该填充数组中的元素0,01和1,02和@987654335 @、11和3等等……所以我想不出一个明显的方法!
标签: c++ arrays matrix boost symmetric