Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

DatosMATLAB

El arrayMATLAB

El lenguaje funciona con un único tipo de objeto: la matriz.MATLAB®MATLAB Todas las variables (incluidos escalares, vectores, matrices, matrices de caracteres, matrices de celdas, estructuras y objetos) se almacenan como matrices.MATLABMATLAB En C/C++, la matriz se declara como de tipo.MATLABmxArray La estructura contiene la siguiente información sobre la matriz:mxArray

  • Su tipo

  • Sus dimensiones

  • Los datos asociados con esta matriz

  • Si es numérico, si la variable es real o compleja

  • Si es disperso, sus índices y elementos máximos distintos de cero

  • Si una estructura u objeto, el número de campos y nombres de campo

Para acceder a la estructura, utilice las funciones de la API en la biblioteca de matrices.mxArray Estas funciones le permiten crear, leer y consultar información sobre los datos en sus archivos MEX.MATLAB Las funciones de la biblioteca de matrices utilizan el tipo para evitar problemas de portabilidad y permitir que los archivos de origen MEX se compilen correctamente en todos los sistemas.mwSize

Ciclo de vida de mxArray

Al igual que las funciones, un archivo MEX pasa variables por referencia.MATLABrutina de pasarelaMATLAB Sin embargo, estos argumentos son punteros C. A a una variable es la (ubicación en memoria) de la variable. funciones controlan el almacenamiento de datos automáticamente.PunteroDirecciónMATLAB Al pasar datos a un archivo MEX, utiliza punteros, que siguen reglas específicas para el acceso y la manipulación de variables. Para obtener información sobre cómo trabajar con punteros, consulte una referencia de programación, como por ejemplo Kernighan, b. w. y d. m. Ritchie.El lenguaje de programación C

Nota

Puesto que las variables utilizan la memoria, usted necesita entender cómo su archivo MEX crea una y su responsabilidad para liberar (liberando) la memoria.mxArray Esto es importante para evitar fugas de memoria. El ciclo de vida de una (y las reglas para administrar la memoria) depende de si se trata de un argumento de entrada, un argumento de salida o una variable local.mxArray La función a la que llama para desasignar una depende de la función que usó para crearla.mxArray Para obtener más información, busque la función en la biblioteca de matrices C.

Argumento de entradaprhs

Un pasado a un archivo MEX a través del parámetro de entrada existe fuera del alcance del archivo MEX.mxArrayprhs No liberar memoria para ninguno en el parámetro.mxArrayprhs Además, las variables son de solo lectura; no los modifique en su archivo MEX.prhs

Argumento de salidaplhs

Si crea una (asignar memoria y crear datos) para un argumento de salida, la memoria y los datos existen más allá del ámbito del archivo MEX.mxArray No liberar memoria en un devuelto en el parámetro de salida.mxArrayplhs

Variable local

La memoria se asigna cada vez que se utiliza una función para crear una o cuando se llama a las funciones asociadas.mxCreate*mxArraymxCalloc Después de observar las reglas para el manejo de los argumentos de entrada y salida, el archivo MEX debe destruir las matrices temporales y la memoria asignada dinámicamente libre. Para desasignar memoria, utilice cualquiera o.mxDestroyArraymxFree Para obtener información sobre qué función usar, consulte.MX Matrix Library

Almacenamiento de datos

almacena los datos en un esquema de numeración columna-mayor (en columnas), que es cómo FORTRAN almacena matrices. utiliza esta Convención porque fue escrita originalmente en Fortran. almacena internamente los elementos de datos de la primera columna en primer lugar, a continuación, los elementos de datos de la segunda columna segundo, y así sucesivamente, a través de la última columna.MATLABMATLABMATLAB

Por ejemplo, dada la matriz:

a = ['house'; 'floor'; 'porch'] 
a =    house    floor    porch

sus dimensiones son:

size(a) 
ans =      3     5

y sus datos se almacenan como:

Si una matriz es N-dimensional, representa los datos en el orden N-Major.MATLAB Por ejemplo, considere una matriz tridimensional que tiene dimensiones por--por-.423 Aunque puede visualizar los datos como:

representa internamente los datos de esta matriz tridimensional en el orden siguiente:MATLAB

Un

B

C

D

E

F

G

H

Me

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

La función crea el desfase desde el primer elemento de una matriz hasta el elemento deseado, utilizando subsubscripción de N-dimensional.mxCalcSingleSubscript

Tipos de datosMATLAB

Matrices de doble precisión complejas

El tipo de datos más común es la matriz no dispersa de doble precisión compleja.MATLAB Estas matrices son de tipo y tienen dimensiones-por-, donde es el número de filas y es el número de columnas.doublemnmn Los datos se almacenan como un vector de números intercalados de doble precisión donde las partes reales e imaginarias se almacenan una al lado de la otra. El puntero a estos datos se conoce como (puntero a array).pa Para probar una matriz no compleja, llame.mxIsComplex

Antes de la versión 9,4 (R2018a), se utilizaba una representación de almacenamiento.MATLABMATLABseparate Los datos se almacenan como dos vectores de números de doble precisión: uno contiene los datos reales y uno contiene los datos imaginarios. Los punteros a estos datos se denominan (puntero a datos reales) y (puntero a datos imaginarios), respectivamente.prpi Una matriz no compleja es aquella cuyo es.piNULL Sin embargo, para probar una matriz no compleja, llame.mxIsComplex

Otras matrices numéricas

es compatible con los enteros de punto flotante de precisión única y de 8, 16, 32 y 64 bits, ambos firmados y sin firmar.MATLAB

Matrices lógicas

El tipo de datos lógico representa un estado o lógico mediante los números y, respectivamente.truefalse10 Determinadas funciones y operadores devuelven lógica o lógica para indicar si se ha determinado que una determinada condición es verdadera o no.MATLAB10 Por ejemplo, la instrucción devuelve un valor lógico.(5 * 10) > 401

MatricesMATLABchar

las matrices almacenan datos como enteros de 16 bits sin signo.MATLABchar Para convertir una matriz en una cadena de estilo C, llame.MATLABcharmxArrayToString Para convertir una cadena de estilo C en una matriz, llame a.charmxCreateString

Matrices de celdas

Las matrices de celdas son una colección de matrices donde cada una se conoce como una celda.MATLABmxArray Las matrices de celdas permiten que las matrices de diferentes tipos se almacenen juntas.MATLAB Las matrices de celdas se almacenan de manera similar a las matrices numéricas, excepto que la porción de datos contiene un único vector de punteros.mxArrays Los miembros de este vector se denominan células. Cada celda puede ser de cualquier tipo de datos admitidos, incluso de otra matriz de celdas.

Estructuras

A-por-estructura se almacena de la misma manera que un array-por-Cell donde está el número de campos en la estructura.111nn Los miembros del vector de datos se denominan campos. Cada campo está asociado con un nombre almacenado en el.mxArray

Objetos

Los objetos se almacenan y se accede a ellos de la misma forma que las estructuras. En, los objetos se denominan estructuras con métodos registrados.MATLAB Fuera, un objeto es una estructura que contiene almacenamiento para un nombre de clase adicional que identifica el nombre del objeto.MATLAB

Los arrays multidimensionales

matrices de cualquier tipo pueden ser multidimensionales.MATLAB Se almacena un vector de enteros donde cada elemento es el tamaño de la dimensión correspondiente. El método de almacenamiento de los datos es el mismo que para las matrices.

Los arrays vacíos

matrices de cualquier tipo pueden estar vacías.MATLAB Un vacío es uno con al menos una cota igual a cero.mxArray Por ejemplo, una precisión doble de tipo, donde e igual a 0 y es, es una matriz vacía.mxArraydoublemnpaNULL

Las matrices dispersas

Las matrices dispersas tienen una Convención de almacenamiento diferente de las matrices completas.MATLAB El parámetro sigue siendo una matriz de números de precisión doble o valores lógicos, pero esta matriz solo contiene elementos de datos distintos de cero.pa

Hay tres parámetros adicionales:,, y.nzmaxirjc Utilice los tipos y al declarar variables para estos parámetros.mwSizemwIndex

  • es un entero que contiene la longitud de ynzmaxirpa. Es el número máximo de elementos distintos de cero en la matriz dispersa.

  • apunta a una matriz de longitud de enteros que contiene los índices de fila de los elementos correspondientes enirnzmaxpa.

  • apunta a una matriz de longitud de enteros, donde es el número de columnas de la matriz dispersa.jcn+1n En C, el primer elemento de un tiene un índice de 0.mxArray La matriz contiene información de índice de columna.jc Si la columna TH de la matriz dispersa tiene elementos distintos de cero, es el índice en yjjc[j]irpa del primer elemento distinto de cero en la columna TH.j Index contiene el último elemento distinto de cero en esa columna.jc[j+1] - 1 Para la columna TH de la matriz dispersa, es el número total de elementos distintos de cero en todas las columnas anteriores.jjc[j] El último elemento de la matriz, es igual a, el número de elementos distintos de cero en toda la matriz dispersa.jcjc[n]nnz Si es menor que, se pueden insertar entradas más cero en la matriz sin asignar más almacenamiento.nnznzmax

Uso de tipos de datos

Puede escribir archivos MEX de origen, aplicaciones de archivo MAT y aplicaciones de motor en C/C++ que acepten cualquier clase o tipo de datos admitidos por (consulte).MATLABTipos de datos En Fortran, solo se admite la creación de doble precisión por matrices y cadenas.nm Usted utiliza binarios C/C++ y archivos MEX Fortran como funciones.MATLAB

Precaución

no comprueba la validez de las estructuras de datos creadas en C/C++ o Fortran mediante una de las funciones de creación de la biblioteca de matrices (por ejemplo,).MATLABMATLABmxCreateStructArray El uso de sintaxis no válida para crear una estructura de datos puede dar lugar a un comportamiento inesperado en el programa de C/C++ o Fortran.MATLAB

Declarar estructuras de datos

Para controlar matrices, use Type.MATLABmxArray La siguiente declaración declara un nombre:mxArraymyData

mxArray *myData;

Para definir los valores de, utilice una de las funciones.myDatamxCreate* Algunas rutinas de creación de matrices útiles son, y.mxCreateNumericArraymxCreateCellArraymxCreateCharArray Por ejemplo, la siguiente instrucción asigna un punto-por-flotante inicializado a:m1mxArray0

myData = mxCreateDoubleMatrix(m, 1, mxREAL);

Los programadores de C/C++ deben tener en cuenta que los datos de una matriz están en orden de columna-principal.MATLAB (Para obtener una ilustración, consulte.)Almacenamiento de datos Utilice las rutinas de acceso a matrices para leer datos de un.MATLABmxGet*mxArray

Manipular datos

Las rutinas de acceso a matrices obtienen referencias a los datos en un.mxGet*mxArray Utilice estas rutinas para modificar los datos en su archivo MEX. Cada función proporciona acceso a información específica en el.mxArray Algunas funciones útiles son,,, y.mxGetDoublesmxGetComplexDoublesmxGetMmxGetString Muchas de estas funciones tienen rutinas correspondientes para permitirle modificar valores en la matriz.mxSet*

Las siguientes instrucciones leen la entrada en una cadena de estilo C.prhs[0]buf

char *buf; int buflen; int status; buflen = mxGetN(prhs[0])*sizeof(mxChar)+1; buf = mxMalloc(buflen); status = mxGetString(prhs[0], buf, buflen); 

Ejemploexplore

Hay un ejemplo de archivo MEX de origen incluido con, llamadoMATLAB explore.c, que identifica el tipo de datos de una variable de entrada. El código fuente de este ejemplo se encuentra en matlabrootDónde/extern/examples/mex matlabroot representa la carpeta de nivel superior donde está instalada en el sistema.MATLAB

Nota

En las discusiones independientes de la plataforma que hacen referencia a rutas de carpeta, esta documentación usa la Convención.UNIX® Por ejemplo, una referencia general a la carpeta esmex matlabroot./extern/examples/mex

Para compilar el archivo MEX de ejemplo, primero copie el archivo en una carpeta de escritura en la ruta de acceso.

copyfile(fullfile(matlabroot,'extern','examples','mex','explore.c'),'.','f')

Use el comando para compilar el archivo MEX.mex

mex explore.c -R2018a

Tipo:

x = 2; explore(x)
------------------------------------------------ Name: prhs[0] Dimensions: 1x1  Class Name: double ------------------------------------------------  (1,1) = 2

acepta cualquier tipo de datos.explore Intente usar con estos ejemplos:explore

explore([1 2 3 4 5]) explore 1 2 3 4 5 explore({1 2 3 4 5}) explore(int8([1 2 3 4 5])) explore {1 2 3 4 5} explore(sparse(eye(5))) explore(struct('name', 'Joe Jones', 'ext', 7332)) explore(1, 2, 3, 4, 5) explore(complex(3,4))

Temas relacionados