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 массива в следующем порядке:
A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
Функция mpsCalcSingleSubscript()
создает смещение из первого элемента массива к желаемому элементу, с помощью N-мерного индексирования.
Индексация MATLAB запускается в 1, где индексация C запускается в 0.
Объедините с двойной точностью, неразреженные матрицы типа 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 имеют тип 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
и pr
(и pi
, если это существует) первого ненулевого элемента в 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);