print2darray
ФункцияThe print2darray
функция в shrlibsample
в библиотеке отображаются значения массива 2-D с тремя столбцами и переменным количеством строк. The my2d
параметр является двумерным массивом double
. The 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
ФункцияThe 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