У меня есть код MATLAB, которыйКак представлять 2D массив MATLAB в MEX код
%% Inputs are theta and h (size NxM)
alpha=zeros(N,M);
h_tmp=zeros(N,M);
h_tmp(1:N-1,:)=h(2:N ,:);
for i=1:N
alpha(i,:)=theta.*(h_tmp(i,:)+h(i,:));
end
Используя векторизованную метод, приведенный выше код может быть
alpha = theta .* [h(1:N-1,:) + h(2:N,:); h(N,:)];
Чтобы ускорить код , Я хочу переписать его в файле MEX с помощью C++. Основной отличается от MATLAB и C++ в 2D массива строк крупный заказ (MATLAB) и столбца крупный заказ (C++)
double *h, *alpha, *h_temp;
int N,M;
double theta;
N = (int) mxGetN(prhs[0]); //cols
M = (int) mxGetM(prhs[0]); //rows
h = (double *)mxGetData(prhs[0]);
theta = (double)*mxGetPr(prhs[1]);
/* Initial zeros matrix*/
plhs[0] = mxCreateDoubleMatrix(M, N, mxREAL); alpha = mxGetPr(plhs[0]);
//////////////Compute alpha/////////
for (int rows=0; rows < M; rows++) {
//h[N*rows+cols] is h_tmp
for (int cols=0; cols < N; cols++) {
alpha[N*rows+cols]=theta*(h[N*rows+cols+1]+h[N*rows+cols]);
}
}
ли мой Mex код и MATLAB код эквивалент? Если нет, можете ли вы помочь мне исправить это?
Это не 'строки + строки * N', не так ли? Вы должны иметь цикл столбца и умножать количество строк с индексом столбца, если я правильно понимаю ваш код. Это должно быть что-то вроде 'alpha [N * rows + col]' где 'col' является счетчиком для второго внутреннего цикла ... – kkuilla
Как насчет представления h и h_tmp? Правильно ли. Я исправлю это сейчас и снова проведу проверку. – Jame
Далее условие во втором цикле для обработки НЕ ДОЛЖНО быть 'rows