mxSetIr (C および Fortran)
スパース配列の配列 IR
C 構文
#include "matrix.h" void mxSetIr(mxArray *pm, mwIndex *ir);
Fortran 構文
#include "fintrf.h" subroutine mxSetIr(pm, ir) mwPointer pm, ir
引数
pm
スパース
mxArray
へのポインターir
配列
ir
へのポインター。配列ir
は、列優先の順序で並べ替えなければなりません。
説明
mxSetIr
を使用して、スパース mxArray
の配列 ir
を指定します。配列 ir
は整数の配列です。配列 ir
の長さは nzmax
(スパース配列に割り当てられたストレージ) または nnz
(非ゼロの行列要素の数) の値と同じです。
配列 ir
内の各要素は、非ゼロ要素を含む行 (1 によりオフセット) を示します (配列 jc
は、非ゼロ要素を含む列を間接的に指定するインデックスです。jc
の詳細については、mxSetJc
を参照してください。)
たとえば、以下のように入力して、6 つの非ゼロ要素を含む Sparrow
という名前の 7
行 3
列のスパース mxArray
を作成するとします。
Sparrow = zeros(7,3); Sparrow(2,1) = 1; Sparrow(5,1) = 1; Sparrow(3,2) = 1; Sparrow(2,3) = 2; Sparrow(5,3) = 1; Sparrow(6,3) = 1; Sparrow = sparse(Sparrow);
配列 pr
は、スパース行列の実数データを格納し、Sparrow
では 5 つの 1 と 1 つの 2 を含みます。非ゼロの虚数データが存在する場合、それは配列 pi
内に含まれます。
添字 | ir | pr | jc | コメント |
---|---|---|---|---|
(2,1) | 1 | 1 | 0 | 列 1。行は 2 なので |
(5,1) | 4 | 1 | 2 | 列 1。行は 5 なので |
(3,2) | 2 | 1 | 3 | 列 2。行は 2 なので |
(2,3) | 1 | 2 | 6 | 列 3。行は 2 なので |
(5,3) | 4 | 1 | 列 3。行は 5 なので | |
(6,3) | 5 | 1 | 列 3。行は 6 なので |
配列 ir
の各要素は、対応する非ゼロ要素の行より常に 1 だけ少なくなっていることに注目してください。たとえば、最初の非ゼロ要素は行 2 にあるため、ir
の最初の要素は 1 (つまり 2 – 1) です。2 番目の非ゼロ要素は行 5 にあるため、ir
の 2 番目の要素は 4 (5 – 1) です。
配列 ir
は、列優先の順序でなければなりません。配列 ir
は最初に列 1 (存在する場合) の行の位置を定義してから、列 2 (存在する場合) の行の位置を定義し、続けて列 N まで定義していきます。各列内では、行位置 1 は行位置 2 の前に表示されなければなりません (以下同様)。
mxSetIr
では配列 ir
を自動的に並べ替えません。したがって、既に並べ替えられている配列 ir
を指定しなければなりません。
この関数は、置き換える既存のデータに割り当てられているメモリは解放しません。既存のメモリを解放するには、mxSetIr
を呼び出す前に、mxGetIr
の返すポインターにある mxFree
を呼び出します。
例
の次の例を参照してください。matlabroot
/extern/examples/mx
の次の例を参照してください。matlabroot
/extern/examples/mex
バージョン履歴
R2006a より前に導入