2

注:私はすでにこの質問をしましたが、「広すぎる」ため、あまり説明がありませんでした。この質問がどのように具体的になるかわかりません (特定の使用法のために特定のライブラリの特定のクラスを扱っています...)。 ..

疎行列で固有値を使用して、疎行列/行列乗算を実行したいと思います。これらの行列は、標準の 3 配列圧縮行/列ストレージで作業しているコードで既に定義されています。

次に、メモリ内で行列が重複しないようにするために、これらの配列のラッパーとして Eigen::SparseMatrix クラスを使用したいと思います (内部的に Eigen がそのような 3 配列ストレージを使用すると仮定します)。次のようなことをしたいと思います。

Eigen::SparseMatrix smin0(n,m);
Eigen::SparseMatrix smin1(m,l);
Eigen::SparseMatrix smout(n,l);

smin0.set_innerPtr(myInnerPtr0);
smin0.set_outerPtr(myOuterPtr0);
smin0.set_valuePtr(myValuePtr0);

smin1.set_innerPtr(myInnerPtr1);
smin1.set_outerPtr(myOuterPtr1);
smin1.set_valuePtr(myValuePtr1);

smout=smin0*smin1;

int *myOutInnerPtr=smout.innerIndexPtr();
int *myOutOuterPtr=smout.outerIndexPtr();
double *myOutValuePtr=smout.valuePtr();

それは可能ですか?

どうもありがとう

4

1 に答える 1

0

ggael が指摘したように、そのために Eigen ::MappedSparseMatrixを使用できます。

a の内部ポインターを単に上書きできない理由SparseMatrixは、これがそれらの割り当てを解除するときに問題を引き起こす可能性があるためですが、 SparseMatrixEigen とは異なる方法でそれらを割り当てました (そして、Eigen が内部的にメモリを割り当てる方法は実装の詳細であり、実際にはすべきではありません)。あなたのコードで依存してください)。

于 2016-09-25T10:35:56.237 に答える