How do I pass a cell array from matlab to c code?
8 ビュー (過去 30 日間)
古いコメントを表示
Hi every one,
my code snippet in matlab is,
L = zeros(numBlocksN, numBlocksO);
for r = 1:numBlocksN
for c = 1:numBlocksO
[rcEmd] = blockDistance(cell1{r}, cell2{c});
L(r,c) = rcEmd;
end
end
where numBlocksN & numBlocksO are constants, and cell1 & cell2 are cell arrays and the element of each (i.e., cell1{r} & cell2{c}) are structure arrays. The blockDistance inside loop is a self-defined fuction which computes the distance between cell1{r} and cell2{c}.
As is known, it is time-consuming to use loops in Matlab. So I want to translate this particular snippet into c source. I need to pass the integers numBlocksN, numBlocksO and two cell arrays ( cell1 and cell2 ) into c as arguments. And also, I want return the computed result L which carries the distance between each cell1{r} and cell2{c}. Could anyone kindly point out me a way to achieve this? Many thanks in advance.
0 件のコメント
採用された回答
Jan
2011 年 2 月 27 日
Cell arrays are passed exactly as any other type. I assume, your question concerns the usage of a cell inside a C-mex.
mxArray *c1, *c2;
double *OutputPtr;
plhs[0] = mxCreateDoubleMatrix(numBlocksN, numBlockO, mxREAL);
OutputPtr = mxGetPr(plhs[0]);
for (r = 0; r < numBlocksN; r++) {
c1 = mxGetCell(prhs[2], r);
for (c = 0; c < numBlocksO; c++) {
c2 = mxGetCell(prhs[3], c);
*OutputPtr++ = blockDistance(c1, c2); % EDITED: * added
end
end
Now lockDistance(c1, c2) gets pointers to the cell elements. Depending on your function lockDistance, you might need further e.g. mxGetPr calls.
BTW, your M-version can be made a littlte bit faster also:
L = zeros(numBlocksN, numBlocksO);
for c = 1:numBlocks0
c2 = cell2{c};
for r = 1:numBlocksN
L(r,c) = blockDistance(cell1{r}, c2);
end
end
In addition I would inline blockDistance and I guess it can be vectorized.
5 件のコメント
Bruno Luong
2011 年 2 月 27 日
If blockDistance remains Matlab code you won't gain any significant in term of speed, as I explained in the News Group.
その他の回答 (1 件)
参考
カテゴリ
Help Center および File Exchange で Function Creation についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!