배열 전달하기 예제
print2darray 함수
shrlibsample 라이브러리의 print2darray 함수는 3개의 열과 가변 개수의 행을 갖는 2차원 배열의 값을 표시합니다. my2d 파라미터는 double형의 2차원 배열입니다. 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
4개의 행과 3개의 열을 갖는 MATLAB 배열을 만듭니다.
m = reshape(1:12,4,3)
m = 4×3
1 5 9
2 6 10
3 7 11
4 8 12
값을 표시합니다. 첫 번째 열이 [1 2 3 4]가 아닌 [1 4 7 10]입니다.
calllib('shrlibsample','print2darray',m,4)
1 2 3
4 5 6
7 8 9
10 11 12
ans = 4×3
1 5 9
2 6 10
3 7 11
4 8 12
m을 전치하여 원하는 결과를 얻습니다.
calllib('shrlibsample','print2darray',m',4)
1 5 9
2 6 10
3 7 11
4 8 12
ans = 3×4
1 2 3 4
5 6 7 8
9 10 11 12
multDoubleArray 함수
shrlibsample 라이브러리의 multDoubleArray 함수는 배열의 각 요소에 3을 곱합니다. 이 함수는 단일 첨자(선형 인덱싱)를 사용하여 입력 배열을 탐색합니다.
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, |
3차원 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