0

私はいくつかの計算を行い、結果のヤコビ行列 NxN 行列と右辺ベクトル(n) をブーストの 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

私は多くのバリエーションを試し、ドキュメントを見ました:

http://ublas.sourceforge.net/refdoc/classboost_1_1numeric_1_1ublas_1_1compressed__matrix.html

また、ViennaCL の例はうまくいきません。

http://viennacl.sourceforge.net/viennacl-examples-sparse-matrix.html

数時間のグーグル検索の後、他の誰かがクラックできることを期待して、ここに投稿することにしました。

4

1 に答える 1

1

このループを閉じるために、私は自分の問題を解決するために何をしたかをみんなに知らせたいと思いました. ViennaCL プロジェクトの Karl Rupp に感謝します。

別の方法として、operator() を介して ublas-matrix を直接埋めます。

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

値の順序によっては、ublas_matrix を直接入力すると、コピーよりも遅くなったり速くなったりする場合があります。経験則として、エントリが「ランダム」な方法で書き込まれる場合は常に vector< map > の方が高速ですが、行と列のエントリを連続した順序で埋める (そして最終的にゼロ以外のエントリの数を行列に提供する) 場合は ublas_matrix の方が高速です。コンストラクターを前もって)。

于 2013-09-02T16:15:44.780 に答える