0

間の効率的なコピーメカニズムはありますか?

            std::vector<std::vector<double>> std_mat 
            arma::mat arma_mat

ここで、arma::mat arma_mat は armadillo 行列/数学ライブラリを指します。

http://arma.sourceforge.net/

私のプロジェクトは、マトリックスがそれぞれ上記のように定義されている 2 つの別個のマトリックス/データ取得ライブラリに依存しています。ただし、処理パイプラインの特定の段階で、レガシ コードを壊さないように、1 つを別のコードにコピーする必要があります。ある種のキャスト演算子があるかどうか (コピーする必要がないため)、またはない場合は、効率的なコピーメカニズム (vector.emplace_back の概念に似たもの) があるかどうか疑問に思っています。現在、二重の for ループを使用していますが、より効率的であると考えています。

4

1 に答える 1

1

ベクトル/メモリの使用方法を少し変更することで、おそらくコピーを回避できます。

ドキュメントを見てみると

mat(ptr_aux_mem, n_rows, n_cols, copy_aux_mem = true, strict = false)

書き込み可能な補助 (外部) メモリからのデータを使用して行列を作成します。ここで、ptr_aux_mem はメモリへのポインタです。デフォルトでは、マトリックスは独自のメモリを割り当て、補助メモリからデータをコピーします (安全のため)。ただし、copy_aux_mem が false に設定されている場合、マトリックスは代わりに補助メモリを直接使用します (つまり、コピーしません)。これは高速ですが、自分が何をしているのかを理解していないと危険です!

行列のサイズが固定されていることがわかっている場合はmat、メモリのチャンクを提供することで を構築できます。ドキュメントに次のように記載されていることに注意してください。

要素は列優先の順序で格納されます (つまり、列ごと)

于 2016-08-18T01:23:16.653 に答える