Примеры Передачи массивов

функция 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-стиля

Этот пример показывает, как передать данные, хранимые по столбцам в массиве 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®:

Возвратите типИмяАргументы
doublePtrmultDoubleArray(doublePtr,
int32

Сохранение 3-D массива MATLAB

Этот пример показывает, как функция 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