Estoy tratando de averiguar cómo acceder a una matriz que está almacenada en un campo en una estructura matlab a partir de una función mex.¿Cómo acceder a una matriz en el campo de una estructura matlab desde una función mex?
Eso es terriblemente largo aliento ... Me explico:
tengo una estructura de MATLAB que se definió como la siguiente:
matrixStruct = struct('matrix', {4, 4, 4; 5, 5, 5; 6, 6 ,6})
Tengo una función Mex en el que me gustaría ser capaz de recibir un puntero al primer elemento en la matriz (matriz [0] [0], en términos c), pero no he podido averiguar cómo hacerlo.
He intentado lo siguiente:
/* 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)));
}
Lo que esto termina la impresión es la siguiente:
variaciones4.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
También he tratado de la siguiente, pensando que tal vez era algo poco firme con llamadas a funciones anidadas, pero fue en vano:
/* 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 */
¿Alguien tiene una identificación? ¿Cómo puedo lograr lo que intento o lo que potencialmente estoy haciendo mal?
Gracias!
Editar: Según el comentario de yuk, traté de hacer operaciones similares en una estructura que tiene un campo llamado matriz que es una matriz unidimensional de dobles.
La estructura que contiene la matriz se define como sigue:
arrayStruct = struct('array', {4.44, 5.55, 6.66})
Probé el siguiente en la arrayStruct desde dentro de la función Mex:
mptr = mxGetPr(mxGetField(prhs[0], 0, "array"));
printf("%f\n", *(mptr));
printf("%f\n", *(mptr + 1));
printf("%f\n", *(mptr + 2));
... pero la salida siguió lo que era impreso anteriormente:
4.440000
0.000000
0.000000
No tengo mucha experiencia con archivos mex, solo algunos pensamientos. Está intentando acceder a la variable que es la matriz de células en MATLAB. ¿Estás seguro de que los datos se almacenan en consecuencia? ¿Qué pasa si pones doble matriz en la estructura? 'matrixStruct = struct ('matrix', [4, 4, 4; 5, 5, 5; 6, 6, 6])' – yuk
yuk - avísame si lo que he agregado a mi pregunta es lo que sugeriste a hacer. –
No, aún definiste la matriz de celdas. Me gustaría que pruebes esto: 'arrayStruct = struct ('array', [4.44, 5.55, 6.66])'. Observe los corchetes [], no {}. – yuk