C++ ViennaCL中从std::vector到ublas::compressed_矩阵的转换

C++ ViennaCL中从std::vector到ublas::compressed_矩阵的转换,c++,boost,ublas,viennacl,C++,Boost,Ublas,Viennacl,我希望做一些计算,并将结果雅可比矩阵NxN和右手边向量(n)传递给boost的ublas,最终传递给ViennaCL 使用copy()时向量没有问题,但是,矩阵被证明是困难的。任何帮助都将不胜感激 // Global Variables vector< vector<float> > Jacobian(0, vector<float>(0)); //Jacobian matrix vector<float> delta_PQ; //rhs //

我希望做一些计算,并将结果雅可比矩阵NxN和右手边向量(n)传递给boost的ublas,最终传递给ViennaCL

使用copy()时向量没有问题,但是,矩阵被证明是困难的。任何帮助都将不胜感激

// Global Variables
vector< vector<float> > Jacobian(0, vector<float>(0)); //Jacobian matrix
vector<float> delta_PQ; //rhs

//
// Set up some ublas objects
//
ublas::vector<ScalarType> rhs;
ublas::vector<ScalarType> result;
ublas::compressed_matrix<ScalarType> ublas_matrix;
using namespace boost::numeric;


typedef float ScalarType;

// Resize RHS from main program
resize_vector(rhs2, j_dimension);
ublas_matrix2.resize(j_dimension, j_dimension);

//copy content to GPU vector (recommended initialization)
copy(delta_PQ.begin(), delta_PQ.end(), rhs.begin()); //works
copy(Jacobian.begin(), Jacobian.end(), ublas_matrix); //won't compile
//全局变量
向量Jacobian(0,向量(0))//雅可比矩阵
矢量delta_-PQ//rhs
//
//设置一些ublas对象
//
ublas::矢量rhs;
向量结果;
ublas::压缩矩阵ublas\u矩阵;
使用名称空间boost::numeric;
typedef float ScalarType;
//从主程序调整RHS的大小
调整_向量的大小(rhs2,j_维度);
ublas_矩阵2.调整大小(j_维度,j_维度);
//将内容复制到GPU向量(建议初始化)
复制(delta_PQ.begin()、delta_PQ.end()、rhs.begin())//作品
复制(Jacobian.begin()、Jacobian.end()、ublas_矩阵)//不会编译
我尝试了许多变体并查看了文档:

此外,ViennaCL的例子对我也不适用:


在谷歌搜索了几个小时后,我决定在这里发布,希望其他人能破解它,让下一个人更容易找到它。

为了结束这个循环,我想让大家知道我为解决我的问题做了什么。特别感谢卡尔·鲁普在维也纳的项目

或者,通过操作符()直接填充ublas矩阵,即

等等。根据值的顺序,直接填充ublas_矩阵可能比复制慢或快。根据经验,无论何时以“随机”方式写入条目,vector都会更快,而如果以连续顺序填充行和列条目(并最终将非零条目的数量提前提供给矩阵构造函数),则ublas_矩阵会更快

ublas_matrix(1,1) = value1;
ublas_matrix(7,8) = value2;