Обработка данных

Массив MATLAB

MATLAB® Runtime работает с типом отдельного объекта: массив MATLAB. Все переменные MATLAB (включая скаляры, векторы, матрицы, символьные массивы, массивы ячеек, структуры и объекты) хранятся как массивы MATLAB. В клиентском API C/C++ MATLAB Production Server™ массив MATLAB, как объявляют, имеет тип mpsArray. Структура mpsArray содержит следующую информацию о массиве:

  • Ввод

  • Размерности

  • Данные сопоставлены с массивом

  • Если числовой, является ли переменная действительной или комплексной

  • Если разреженный, его индексы и ненулевые максимальные элементы

  • Если структура или объект, количество полей и имен полей

Чтобы получить доступ к структуре mpsArray, используйте API-функции mpsArray. Эти функции позволяют вам создать, читать, и информация о запросе о данных MATLAB, используемых клиентом.

Примечание

API mpsArray зеркально отражает API mxArray, используемый MATLAB Compiler SDK™ и MATLAB внешние интерфейсы.

Хранение данных

MATLAB хранит данные в главной столбцом (постолбцовой) схеме нумерации. MATLAB внутренне хранит элементы данных из первого столбца сначала, затем элементы данных из второго второго столбца, и так далее, через последний столбец.

Например, учитывая матрицу:

a=['house'; 'floor'; 'porch']
a =
   house
   floor
   porch

его размерности:

size(a)
ans =
     3     5

и его данные хранятся как:

Если матрица является N-мерной, MATLAB представляет данные в порядке N-major. Например, рассмотрите 3D массив, имеющий размерности 4 2 3. Несмотря на то, что можно визуализировать данные как:

MATLAB внутренне представляет данные для этого 3D массива в следующем порядке:

ABCDEFGHIJKLMNOPQRSTUVWX
01234567891011121314151617181920212223

Функция mpsCalcSingleSubscript() создает смещение из первого элемента массива к желаемому элементу, с помощью N-мерного индексирования.

Примечание

Индексация MATLAB запускается в 1, где индексация C запускается в 0.

Типы MATLAB

Комплекс с двойной точностью матрицы

Объедините с двойной точностью, неразреженные матрицы типа double и имеют m на n размерностей, где m является количеством строк, и n является количеством столбцов. Данные хранятся как два вектора чисел с двойной точностью — каждый содержит действительные данные, и каждый содержит мнимые данные. Указатели на эти данные упоминаются как pr (указатель на действительные данные) и pi (указатель на мнимые данные), соответственно. Некомплексная матрица является той, pi которой является NULL.

Числовые матрицы

Числовые матрицы являются целыми числами с плавающей точкой с одинарной точностью, которые могут быть 8-, 16-, 32, и 64-битные, оба подписались и без знака. Данные хранятся в двух векторах таким же образом как матрицы с двойной точностью.

Логические матрицы

Тип данных logical представляет логический true или состояние false использование чисел 1 и 0, соответственно. Определенные функции MATLAB и операторы возвращают логический 1 или логический 0, чтобы указать, как ли определенное условие, находили, было верно или нет. Например, оператор (5 * 10) > 40 возвращает логическое значение 1.

Символьные массивы MATLAB

Символьные массивы MATLAB имеют тип char и хранятся подобным образом как 16-битные целые числа без знака, кроме нет никакого компонента мнимых данных. В отличие от C, символьные массивы MATLAB не пустые отключенный.

Массивы ячеек

Массивы ячеек являются набором массивов MATLAB, где каждый mpsArray упоминается как ячейка, позволяя массивам MATLAB различных типов храниться вместе. Массивы ячеек хранятся подобным образом к числовым матрицам, кроме данных, фрагмент содержит один вектор указателей на mpsArray s. Члены этого вектора называются ячейками. Каждая ячейка может иметь любой поддерживаемый тип данных, даже другой массив ячеек.

Структуры

Структуры являются массивами MATLAB с элементами, к которым получают доступ текстовые полевые указатели.

Следующее является примером того, как структуры создаются в MATLAB:

S.name = 'Ed Plum';
S.score = 83;
S.grade = 'B+'

создает скалярную структуру с тремя полями:

 S = 
    name: 'Ed Plum'
    score: 83
    grade: 'B+'

Структура 1 на 1 хранится таким же образом как 1 n массивом ячеек, где n является количеством полей в структуре. Члены вектора данных называются полями. Каждое поле сопоставлено с именем, сохраненным в mpsArray.

Многомерные массивы

Многомерный массив является вектором целых чисел, где каждый элемент является размером соответствующей размерности. Устройство хранения данных данных совпадает с матрицами. Массивы MATLAB любого типа могут быть многомерными.

Пустые массивы

Массивы MATLAB любого типа могут быть пустыми. Пустой mpsArray один по крайней мере с одной равной нулю размерностью. Например, mpsArray с двойной точностью типа, double, где m и n равняются 0 и pr, является NULL, является пустым массивом.

Разреженные матрицы

Разреженные матрицы имеют различное соглашение устройства хранения данных из той из полных матриц в MATLAB. pr параметров и pi являются все еще массивами чисел с двойной точностью, но эти массивы содержат только ненулевые элементы данных. Существует три дополнительных параметра:

  • nzmax является целым числом, которое содержит длину ir, pr, и, если это существует, pi. Это - максимальное количество ненулевых элементов в разреженной матрице.

  • ir указывает на целочисленный массив длины nzmax, содержащий индексы строки соответствующих элементов в pr и pi.

  • jc указывает на целочисленный массив длины n+1, где n является количеством столбцов в разреженной матрице. Массив jc содержит информацию об индексе столбца. Если j th столбец разреженной матрицы имеет какие-либо ненулевые элементы, jc[j] является индексом в ir и prpi, если это существует) первого ненулевого элемента в j th столбец, и jc[j+1] - 1 является индексом последнего ненулевого элемента в том столбце. Для j th столбец разреженной матрицы, jc[j] является общим количеством ненулевых элементов во всех предыдущих столбцах. Последний элемент массива jc, jc[n], равен nnz, количеству ненулевых элементов в целой разреженной матрице. Если nnz является меньше, чем nzmax, больше ненулевых записей может быть вставлено в массив, не выделяя больше устройства хранения данных.

Используя типы данных

Можно написать клиентские приложения MATLAB Production Server в C/C++, которые принимают любой класс или тип данных, поддержанный MATLAB (см. Типы MATLAB).

Внимание

MATLAB Runtime не проверяет валидность структур данных MATLAB, созданных на C/C++. Используя недопустимый синтаксис, чтобы создать структуру данных MATLAB может привести к неожиданному поведению.

Объявление структур данных

Чтобы обработать массивы MATLAB, используйте, вводят mpsArray. Следующий оператор объявляет mpsArray по имени myData:

mpsArray *myData;

Чтобы задать значения myData, используйте одну из функций mpsCreate*. Некоторыми полезными стандартными программами создания массивов является mpsCreateNumericArray(), mpsCreateCellArray() и mpsCreateCharArray(). Например, следующий оператор выделяет m-by-1 mpsArray с плавающей точкой, инициализированный к 0:

myData = mpsCreateDoubleMatrix(m, 1, mpsREAL);

Программисты C/C++ должны отметить, что данные в массиве MATLAB находятся в порядке развертывания по столбцам. (Для рисунка смотрите Хранение данных.) Используют стандартные программы доступа к массиву mpsGet*, чтобы считать данные из mpsArray.

Управление данными

Стандартные программы доступа к массиву mpsGet* получают ссылки на данные в mpsArray. Используйте эти стандартные программы, чтобы изменить данные в вашем клиентском приложении. Каждая функция обеспечивает доступ к определенной информации в mpsArray. Некоторыми полезными функциями является mpsGetData(), mpsGetPr(), mpsGetM() и mpsGetString(). Следующие операторы читают, вводимый символ arrayprhs[0] в C-стиль представляют в виде строки buf:

char *buf;
int buflen;
int status;
buflen = mpsGetN(prhs[0])*sizeof(mpsChar)+1;
buf = malloc(buflen);
status = mpsGetString(prhs[0], buf, buflen);