функция print2darrayФункция print2darray в библиотеке shrlibsample отображает значения 2D массива с тремя столбцами и переменным количеством строк. Параметр my2d является двумерным массивом double. Параметр len является количеством строк.
EXPORTED_FUNCTION void print2darray(double my2d[][3],int len)
{
int indxi,indxj;
for(indxi=0;indxi<len;++indxi)
{
for(indxj=0;indxj<3;++indxj)
{
mexPrintf("%10g",my2d[indxi][indxj]);
}
mexPrintf("\n");
}
}Этот пример показывает, как передать данные, хранившие по столбцам в массиве MATLAB к функции C, которая принимает строку форматом столбца.
Загрузите библиотеку, содержащую функцию print2darray.
if not(libisloaded('shrlibsample')) addpath(fullfile(matlabroot,'extern','examples','shrlib')) loadlibrary('shrlibsample') end
Создайте массив MATLAB с 4 строками и 3 столбцами.
m = reshape(1:12,4,3)
m = 4×3
1 5 9
2 6 10
3 7 11
4 8 12
Отобразите значения. Первый столбец [1 4 7 10] вместо [1 2 3 4].
calllib('shrlibsample','print2darray',m,4)
1 2 3
4 5 6
7 8 9
10 11 12
Транспонируйте m, чтобы получить желаемый результат.
calllib('shrlibsample','print2darray',m',4)
1 5 9
2 6 10
3 7 11
4 8 12
функция multDoubleArrayФункция multDoubleArray в библиотеке shrlibsample умножает каждый элемент массива на три. Функция использует единственный индекс (линейная индексация), чтобы переместиться по входному массиву.
EXPORTED_FUNCTION void multDoubleArray(double *x,int size)
{
/* Multiple each element of the array by 3 */
int i;
for (i=0;i<size;i++)
*x++ *= 3;
}Подпись функции MATLAB®:
| Возвратите тип | Имя | Аргументы |
|---|---|---|
doublePtr | multDoubleArray | (doublePtr, |
Этот пример показывает, как функция C изменяет размерности массива MATLAB, и как восстановить его форму.
Загрузите библиотеку.
if not(libisloaded('shrlibsample')) addpath(fullfile(matlabroot,'extern','examples','shrlib')) loadlibrary('shrlibsample') end
Создайте 2 5 2 входными массивами и отобразите его размерности.
vin = reshape(1:20,2,5,2); vs = size(vin)
vs = 1×3
2 5 2
Вызовите multDoubleArray, чтобы умножить каждый элемент. Отобразите размерности вывода.
vout = calllib('shrlibsample','multDoubleArray',vin,20); size(vout)
ans = 1×2
2 10
Восстановите исходную форму.
vout = reshape(vout,vs); size(vout)
ans = 1×3
2 5 2