2016-03-25 17 views
0

私は固有C++疎行列(<Eigen/Sparse>からSparseMatrix<double>など)を持つメソッドに固有C++密行列クラス(<Eigen/Dense>からMatrixXd)に実装され、いくつかのメソッドを変換しようとしています分けます。固有C++疎行列は、製品を要素ごとと

多くの方法は、単にチャンスMatrixXdからSparseMatrix<double>によって直接変換することができます。しかし、いくつかの方法はできません。私が会った

一つの問題は、スパースマトリックス法に次の要素ごとの配当を変換することです:もともと

(beta.array()/beta.cwiseAbs().array()).sum() 

betaMatrixXd betaとして宣言されています。今、私がbetaSparseMatrix<double> betaと宣言した場合、上記のことを可能にする対応するarray()メソッドはありません。

スパース行列で要素単位の操作を実行するにはどうすればよいですか。

密行列を疎行列に変換する効率的な方法はありますか?

答えて

1

明示的な0に対して厳密に0/0を計算するため、これはサポートされていません。その後、密な配列として非ゼロをマッピング

beta.makeCompressed(); 

Map<ArrayXd> a(beta.valuePtr(), beta.nonZeros(); 
(a/a.abs()).sum; 
+0

はバック密行列にスパース行列を回す方法はあります行列が圧縮モードである場合は、コール確かに、回避することができます? –

+0

マトリックスコンストラクタを使用する:MatrixXd dense(beta); – ggael

関連する問題