Массив ir разреженного массива
#include "matrix.h" void mxSetIr(mxArray *pm, mwIndex *ir);
#include "fintrf.h" subroutine mxSetIr(pm, ir) mwPointer pm, ir
\pm
Указатель на разреженный mxArray
ir
Указатель на массив ir
. Массив ir
должен быть отсортирован в порядке развертывания по столбцам.
Используйте mxSetIr
, чтобы задать массив ir
разреженного mxArray
. Массив ir
является массивом целых чисел; длина массива ir
равняется значению nzmax
, устройство хранения данных, выделенное для разреженного массива, или nnz
, количества ненулевых элементов матрицы.
Каждый элемент в массиве ir
указывает на строку (смещенный 1), в котором может быть найден ненулевой элемент. (Массив jc
является индексом, который косвенно задает столбец, где ненулевые элементы могут быть найдены. Дополнительную информацию см. в mxSetJc
на jc
.)
Например, предположите, что вы создаете 7
-by-3
разреженный mxArray
по имени Sparrow
, содержащий шесть ненулевых элементов путем ввода:
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
является пять 1 с и 2. Если существуют какие-либо ненулевые мнимые данные, то это находится в массиве pi
.
Индекс |
ir |
PR |
jc |
Комментарии |
---|---|---|---|---|
(2,1) | 1 | 1 | 0 |
Столбец 1; |
(5,1) | 4 | 1 | 2 |
Столбец 1; |
(3,2) | 2 | 1 | 3 |
Столбец 2; |
(2,3) | 1 | 2 | 6 |
Столбец 3; |
(5,3) | 4 | 1 |
Столбец 3; | |
(6,3) | 5 | 1 |
Столбец 3; |
Заметьте, как каждый элемент массива ir
всегда является 1 меньше, чем строка соответствующего ненулевого элемента. Например, первый ненулевой элемент находится в строке 2; поэтому, первый элемент в ir
равняется 1 (то есть, 2 – 1). Второй ненулевой элемент находится в строке 5; поэтому, второй элемент в ir
равняется 4 (5 – 1).
Массив ir
должен быть в порядке развертывания по столбцам. Массив ir
должен задать положения строки в столбце 1 (если таковые имеются) сначала, затем положения строки в столбце 2 (если таковые имеются) второй, и так далее, через столбец N. В рамках каждого столбца положение 1 строки должно появиться перед положением 2 строки и так далее.
mxSetIr
не сортирует массив ir
для вас; необходимо задать массив ir
, который уже сортируется.
Эта функция не освобождает памяти, выделенной для существующих данных, которые это перемещает. Чтобы освободить существующую память, вызовите mxFree
на указателе, возвращенном mxGetIr
, прежде чем вы вызовете mxSetIr
.
См. следующие примеры в matlabroot / extern / examples / mx.
См. следующие примеры в matlabroot /extern/examples/mex.