スパース行列を MATLAB から共有ライブラリに渡し、そこで何らかの操作 (C で記述) を実行してから返したいと考えています。
密な行列を渡して使用することができます。かなり簡単です。しかし、スパース行列を MATLAB から共有ライブラリに渡す方法がわかりません。私が見つけたのは、すべて MEX に関するものです。
MATLAB での疎行列形式と C での変換に関する情報を提供していただければ幸いです。
前もって感謝します。
スパース行列を MATLAB から共有ライブラリに渡し、そこで何らかの操作 (C で記述) を実行してから返したいと考えています。
密な行列を渡して使用することができます。かなり簡単です。しかし、スパース行列を MATLAB から共有ライブラリに渡す方法がわかりません。私が見つけたのは、すべて MEX に関するものです。
MATLAB での疎行列形式と C での変換に関する情報を提供していただければ幸いです。
前もって感謝します。
内部的に、MATLAB はCompressed sparse column (CSC) 形式を使用してスパース行列を保存します。形式を理解したら、配列pr、pi、ir、およびjc(それぞれ MEX 関数mxGetPr、mxGetPi、mxGetIr、mxGetJcを使用して) を取得することにより、スパース行列を外部コードに渡すことができます。
pr(および行列が複素数の場合) は、行列の非ゼロ値を含むpi長さの倍精度配列です。nzmax
irとnzmaxの対応する要素の行インデックスを含む長さの整数配列を指します。prpi
jclength の整数配列を指します。n+1ここnで、 は疎行列の列数です。配列には、jc列インデックス情報が含まれています。jスパース行列の- 番目の列にゼロ以外の要素がある場合、jc[j]はirand pr(存在する場合) のインデックスで、 - 番目の列piの最初の非ゼロ要素のインデックスであり、 はその列の最後の非ゼロ要素のインデックスです。疎行列の - 番目の列について、は先行するすべての列の非ゼロ要素の総数です。配列の最後の要素 は、スパース行列全体の非ゼロ要素の数 に等しくなります。jjc[j+1] - 1jjc[j]jcjc[n]nnz