Массив 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