mxSetIr (C и Фортран)

Массив ir разреженного массива

Синтаксис C

#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)110

Столбец 1; ir равняется 1, потому что строка равняется 2.

(5,1)412

Столбец 1; ir равняется 4, потому что строка равняется 5.

(3,2)213

Столбец 2; ir равняется 2, потому что строка равняется 3.

(2,3)126

Столбец 3; ir равняется 1, потому что строка равняется 2.

(5,3)41 

Столбец 3; ir равняется 4, потому что строка равняется 5.

(6,3)51 

Столбец 3; ir равняется 5, потому что строка равняется 6.

Заметьте, как каждый элемент массива 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.

Смотрите также

mxCreateSparse, mxGetIr, mxGetJc, mxSetJc, mxFree, nzmax, nnz

Представлено до R2006a

Была ли эта тема полезной?