mex 함수에서 matlab 구조체의 필드에 저장된 행렬에 액세스하는 방법을 알아 내려고합니다. 굉장히 긴 호흡 것mex 함수에서 matlab 구조체 필드의 행렬에 액세스하는 방법?
... 설명해 드리죠 :
을 나는 다음과 같이 정의 된 MATLAB 구조체가 : 내가 싶습니다있는 MEX 기능이
matrixStruct = struct('matrix', {4, 4, 4; 5, 5, 5; 6, 6 ,6})
을 매트릭스 (매트릭스 [0] [0], C 용어로)의 첫 번째 요소에 대한 포인터를받을 수 있지만 그 방법을 이해할 수 없었습니다.
나는 시도 다음
/* Pointer to the first element in the matrix (supposedly)... */
double *ptr = mxGetPr(mxGetField(prhs[0], 0, "matrix");
/* Incrementing the pointer to access all values in the matrix */
for(i = 0; i < 3; i++){
printf("%f\n", *(ptr + (i * 3)));
printf("%f\n", *(ptr + 1 + (i * 3)));
printf("%f\n", *(ptr + 2 + (i * 3)));
}
무엇이 인쇄를 종료하면 다음과 같다 : 아마도 그것은으로 남았습니다 일이라고 생각하고, 다음의
4.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
나는 또한 시도 변동 중첩 된 함수 호출은 사용할 수 있지만 아무런 소용이 없습니다.
/* Pointer to the first location of the mxArray */
mxArray *fieldValuePtr = mxGetField(prhs[0], 0, "matrix");
/* Get the double pointer to the first location in the matrix */
double *ptr = mxGetPr(fieldValuePtr);
/* Same for loop code here as written above */
ID가없는 사람 내가 어떻게하려고하는지, 또는 내가 잠재적으로 잘못하고있는 것을 어떻게 달성 할 수 있는지에 관해서는?
감사합니다.
편집 : yuk의 의견에 따르면, 나는 1 차원 배열의 double 형인 array라는 필드를 가진 구조체에서 비슷한 연산을 시도했다.
다음과 같이 어레이를 포함하는 구조체가 정의된다
arrayStruct = struct('array', {4.44, 5.55, 6.66})
제가 상기 MEX 함수 내에서 arrayStruct에 다음 시도 :
mptr = mxGetPr(mxGetField(prhs[0], 0, "array"));
printf("%f\n", *(mptr));
printf("%f\n", *(mptr + 1));
printf("%f\n", *(mptr + 2));
하지만 출력 무엇 이어 이전에 인쇄 된 :
4.440000
0.000000
0.000000
나는 mex 파일에 대한 많은 경험이 없으며 단지 약간의 생각 만하고있다. MATLAB의 셀 배열 인 변수에 액세스하려고합니다. 결과적으로 데이터가 저장되었는지 확신합니까? 구조체에 double 배열을 넣으면 어떻게됩니까? 'matrixStruct = struct ('matrix', [4, 4, 4; 5, 5, 5; 6,6,6])' – yuk
yuk - 내가 내 질문에 첨부 한 것이 무엇인지 알려주기 바란다. 해야 할 것. –
아니요, 여전히 셀 배열을 정의했습니다. 이것을 시도해 보시기 바랍니다 :'arrayStruct = struct ('array', [4.44, 5.55, 6.66])'. {}가 아닌 대괄호 []를 주목하십시오. – yuk