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.

Arreglos altos

Los arreglos de discos altos se utilizan para trabajar con datos fuera de la memoria que está respaldado por un datastore. Los almacenes de datos permiten trabajar con datasets grandes en trozos pequeños que caben individualmente en la memoria, en lugar de cargar todo el conjunto de datos en la memoria a la vez. Las matrices altas amplían esta capacidad para permitirle trabajar con datos fuera de la memoria mediante funciones comunes.

¿Qué es una matriz alta?

Dado que los datos no se cargan en la memoria todos a la vez, los arrays altos pueden ser arbitrariamente grandes en la primera dimensión (esto es, pueden tener cualquier número de filas). En lugar de escribir código especial que tenga en cuenta el enorme tamaño de los datos, como con técnicas como MapReduce, las matrices altas permiten trabajar con conjuntos de datos grandes de una manera intuitiva que es similar a la forma en que se trabaja con los arreglos de discos MATLAB® en memoria. Muchos operadores y funciones principales funcionan lo mismo con matrices altas que con matrices en memoria. MATLAB trabaja con pequeños trozos de los datos a la vez, manejando todos los datos de fragmentación y procesamiento en segundo plano, de modo que las expresiones comunes, como A+B, funcionan con grandes conjuntos de datos.

Beneficios de las matrices altas

A diferencia de las matrices en memoria, los arreglos de discos altos normalmente permanecen sin evaluar hasta que se solicita que los cálculos se realicen mediante la función gather . Este evaluación diferida le permite trabajar rápidamente con grandes conjuntos de datos. Cuando eventualmente se solicita la salida mediante gather, MATLAB combina los cálculos en cola cuando es posible y toma el número mínimo de pasadas a través de los datos. El número de pasadas a través de los datos afecta en gran medida el tiempo de ejecución, por lo que se recomienda que solicite la salida sólo cuando sea necesario.

Nota

Dado que gather devuelve resultados como matrices de MATLAB en memoria, se aplican consideraciones de memoria estándar. MATLAB podría agotar la memoria si el resultado devuelto por gather es demasiado grande.

Creación de tablas altas

Las mesas altas son como tablas MATLAB en memoria, excepto que pueden tener cualquier número de filas. Para crear una tabla alta a partir de un conjunto de datos grande, primero debe crear un datastore para los datos. Si el almacén ds contiene datos tabulares, tall(ds) devuelve una tabla alta que contiene los datos. Consulte Datastore para obtener más información sobre la creación de almacenes de datos.

Cree un almacén de datos de hojas de cálculo que apunte a un archivo tabular de los vuelos aéreos. Para las carpetas que contienen una colección de archivos, puede especificar toda la ubicación de la carpeta, o utilizar el carácter comodín, '*.csv', para incluir varios archivos con la misma extensión de archivo en el almacén de datos. Limpie los datos mediante el tratamiento de los valores 'NA' como datos que faltan para que datastore los Reemplace con valores NaN . Además, defina el formato de algunas variables de texto en %s para que datastore las lea como matrices de vectores de caracteres.

ds = datastore('airlinesmall.csv'); ds.TreatAsMissing = 'NA'; ds.SelectedFormats{strcmp(ds.SelectedVariableNames,'TailNum')} = '%s'; ds.SelectedFormats{strcmp(ds.SelectedVariableNames,'CancellationCode')} = '%s';

Cree una tabla alta en el almacén de la misma. Cuando se realizan cálculos en esta tabla alta, el almacén de datos subyacente Lee trozos de información y los pasa a la tabla alta para procesarlos. Ni el almacén de datos ni la tabla alta conservan ninguno de los Data subyacentes.

tt = tall(ds)
tt =    M×29 tall table       Year    Month    DayofMonth    DayOfWeek    DepTime    CRSDepTime    ArrTime    CRSArrTime    UniqueCarrier    FlightNum    TailNum    ActualElapsedTime    CRSElapsedTime    AirTime    ArrDelay    DepDelay    Origin    Dest     Distance    TaxiIn    TaxiOut    Cancelled    CancellationCode    Diverted    CarrierDelay    WeatherDelay    NASDelay    SecurityDelay    LateAircraftDelay     ____    _____    __________    _________    _______    __________    _______    __________    _____________    _________    _______    _________________    ______________    _______    ________    ________    ______    _____    ________    ______    _______    _________    ________________    ________    ____________    ____________    ________    _____________    _________________      1987    10       21            3             642        630           735        727          'PS'             1503         'NA'        53                   57               NaN         8          12          'LAX'     'SJC'    308         NaN       NaN        0            'NA'                0           NaN             NaN             NaN         NaN              NaN                   1987    10       26            1            1021       1020          1124       1116          'PS'             1550         'NA'        63                   56               NaN         8           1          'SJC'     'BUR'    296         NaN       NaN        0            'NA'                0           NaN             NaN             NaN         NaN              NaN                   1987    10       23            5            2055       2035          2218       2157          'PS'             1589         'NA'        83                   82               NaN        21          20          'SAN'     'SMF'    480         NaN       NaN        0            'NA'                0           NaN             NaN             NaN         NaN              NaN                   1987    10       23            5            1332       1320          1431       1418          'PS'             1655         'NA'        59                   58               NaN        13          12          'BUR'     'SJC'    296         NaN       NaN        0            'NA'                0           NaN             NaN             NaN         NaN              NaN                   1987    10       22            4             629        630           746        742          'PS'             1702         'NA'        77                   72               NaN         4          -1          'SMF'     'LAX'    373         NaN       NaN        0            'NA'                0           NaN             NaN             NaN         NaN              NaN                   1987    10       28            3            1446       1343          1547       1448          'PS'             1729         'NA'        61                   65               NaN        59          63          'LAX'     'SJC'    308         NaN       NaN        0            'NA'                0           NaN             NaN             NaN         NaN              NaN                   1987    10        8            4             928        930          1052       1049          'PS'             1763         'NA'        84                   79               NaN         3          -2          'SAN'     'SFO'    447         NaN       NaN        0            'NA'                0           NaN             NaN             NaN         NaN              NaN                   1987    10       10            6             859        900          1134       1123          'PS'             1800         'NA'       155                  143               NaN        11          -1          'SEA'     'LAX'    954         NaN       NaN        0            'NA'                0           NaN             NaN             NaN         NaN              NaN                   :       :        :             :            :          :             :          :             :                :            :          :                    :                 :          :           :           :         :        :           :         :          :            :                   :           :               :               :           :                :     :       :        :             :            :          :             :          :             :                :            :          :                    :                 :          :           :           :         :        :           :         :          :            :                   :           :               :               :           :                : 

La pantalla indica que el número de filas, M, se desconoce actualmente. MATLAB muestra algunas de las filas, y las elipses verticales : indican que hay más filas en la tabla alta que no se están mostrando actualmente.

Creación de horarios altos

Si los datos con los que está trabajando tienen un tiempo asociado a cada fila de datos, puede convertir la tabla alta en un horario alto. Hay varias formas de crear un horario alto:

En este caso, la tabla alta tt tiene tiempos asociados a cada fila, pero se desglosan en varias variables de tabla como Year, Month, DayofMonth, etc. Combine todas estas piezas de información DateTime en una única nueva variable de alta DateTime Dates, que se basa en los tiempos de salida DepTime. Cree un horario alto usando Dates como los tiempos de la fila. Dado que Dates es la única variable DateTime en la tabla, la función table2timetable la utiliza automáticamente para los tiempos de fila.

hrs = (tt.DepTime - mod(tt.DepTime,100))/100; mins = mod(tt.DepTime,100); tt.Dates = datetime(tt.Year, tt.Month, tt.DayofMonth, hrs, mins, 0); tt(:,1:8) = []; TT = table2timetable(tt)
TT =    M×21 tall timetable              Dates           UniqueCarrier    FlightNum    TailNum    ActualElapsedTime    CRSElapsedTime    AirTime    ArrDelay    DepDelay    Origin    Dest     Distance    TaxiIn    TaxiOut    Cancelled    CancellationCode    Diverted    CarrierDelay    WeatherDelay    NASDelay    SecurityDelay    LateAircraftDelay     ____________________    _____________    _________    _______    _________________    ______________    _______    ________    ________    ______    _____    ________    ______    _______    _________    ________________    ________    ____________    ____________    ________    _____________    _________________      21-Oct-1987 06:42:00    'PS'             1503         'NA'        53                   57               NaN         8          12          'LAX'     'SJC'    308         NaN       NaN        0            'NA'                0           NaN             NaN             NaN         NaN              NaN                   26-Oct-1987 10:21:00    'PS'             1550         'NA'        63                   56               NaN         8           1          'SJC'     'BUR'    296         NaN       NaN        0            'NA'                0           NaN             NaN             NaN         NaN              NaN                   23-Oct-1987 20:55:00    'PS'             1589         'NA'        83                   82               NaN        21          20          'SAN'     'SMF'    480         NaN       NaN        0            'NA'                0           NaN             NaN             NaN         NaN              NaN                   23-Oct-1987 13:32:00    'PS'             1655         'NA'        59                   58               NaN        13          12          'BUR'     'SJC'    296         NaN       NaN        0            'NA'                0           NaN             NaN             NaN         NaN              NaN                   22-Oct-1987 06:29:00    'PS'             1702         'NA'        77                   72               NaN         4          -1          'SMF'     'LAX'    373         NaN       NaN        0            'NA'                0           NaN             NaN             NaN         NaN              NaN                   28-Oct-1987 14:46:00    'PS'             1729         'NA'        61                   65               NaN        59          63          'LAX'     'SJC'    308         NaN       NaN        0            'NA'                0           NaN             NaN             NaN         NaN              NaN                   08-Oct-1987 09:28:00    'PS'             1763         'NA'        84                   79               NaN         3          -2          'SAN'     'SFO'    447         NaN       NaN        0            'NA'                0           NaN             NaN             NaN         NaN              NaN                   10-Oct-1987 08:59:00    'PS'             1800         'NA'       155                  143               NaN        11          -1          'SEA'     'LAX'    954         NaN       NaN        0            'NA'                0           NaN             NaN             NaN         NaN              NaN                   :                       :                :            :          :                    :                 :          :           :           :         :        :           :         :          :            :                   :           :               :               :           :                :     :                       :      

Creación de matrices altas

Cuando se extrae una variable de una tabla alta o de un horario alto, el resultado es una matriz alta del tipo de datos subyacente apropiado. Un array alto puede ser un array numérico, lógico, DateTime, duración, duración del calendario, categórico, String o Cell. Además, puede convertir un array en memoria A en un array alto con tA = tall(A). El array en memoria A debe ser uno de los tipos de datos admitidos.

Extraiga la demora de llegada ArrDelay del horario alto TT. Esto crea una nueva variable de matriz alta con el tipo de datos subyacente Double.

a = TT.ArrDelay
a =    M×1 tall double column vector       8      8     21     13      4     59      3     11     :     :

Las funciones classUnderlying y isaUnderlying son útiles para determinar el tipo de datos subyacente de una matriz alta.

Evaluación diferida

Un aspecto importante de las matrices altas es que a medida que trabajas con ellos, la mayoría de las operaciones no se realizan inmediatamente. Estas operaciones parecen ejecutarse rápidamente, ya que el cómputo real se aplaza hasta que se solicite específicamente que se realicen los cálculos. Puede desencadenar la evaluación de una matriz alta con la función gather (para llevar el resultado a la memoria) o la función write (para escribir el resultado en el disco). Esta evaluación diferida es importante porque incluso un comando simple como size(X) ejecutado en una matriz alta con mil millones de filas no es un cálculo rápido.

Al trabajar con arreglos altos, MATLAB realiza un seguimiento de todas las operaciones a realizar. Esta información se utiliza para optimizar el número de pasadas a través de los datos que se requerirán cuando se solicite la salida con la función gather . Por lo tanto, es normal trabajar con matrices altas no evaluadas y solicitar la salida sólo cuando la requiera. Para obtener más información, consulte Evaluación diferida de matrices altas.

Calcule la media y desviación estándar de la demora de llegada. Utilice estos valores para construir los umbrales superior e inferior para los retrasos que se encuentran dentro de una desviación estándar de la media. Observe que el resultado de cada operación indica que la matriz aún no se ha calculado.

m = mean(a,'omitnan')
m =     tall double       ?
s = std(a,'omitnan')
s =     tall array      ?
one_sigma_bounds = [m-s m m+s]
one_sigma_bounds =    M×N×... tall array      ?    ?    ?    ...     ?    ?    ?    ...     ?    ?    ?    ...     :    :    :     :    :    :

Evaluación con gather

El beneficio de la evaluación retrasada es que cuando llegue el momento de que MATLAB realice los cálculos, a menudo es posible combinar las operaciones de tal manera que el número de pasadas a través de los datos sea minimizado. Así que incluso si realiza muchas operaciones, MATLAB sólo realiza pases adicionales a través de los datos cuando sea absolutamente necesario.

La función gather fuerza la evaluación de todas las operaciones en cola y trae el resultado resultante a la memoria. Por esta razón, puede pensar en gather como un puente entre matrices altas y matrices en memoria. Por ejemplo, no puede controlar los bucles if o while utilizando una matriz alta, pero una vez que la matriz se evalúa con gather se convierte en una matriz lógica en memoria que puede utilizar en estos contextos.

Dado que gather devuelve el resultado completo en MATLAB, debe asegurarse de que el resultado se ajustará a la memoria.

Utilice gather para calcular one_sigma_bounds y llevar el resultado a la memoria. En este caso, one_sigma_bounds requiere varias operaciones para calcular, pero MATLAB combina las operaciones en un paso a través de los datos. Dado que los datos de este ejemplo son pequeños, gather se ejecuta rápidamente. Sin embargo, la eliminación de los pases a través de los datos se vuelve más valiosa a medida que aumenta el tamaño de los datos.

sig1 = gather(one_sigma_bounds)
Evaluating tall expression using the Local MATLAB Session: - Pass 1 of 1: Completed in 1 sec Evaluation completed in 1 sec  sig1 =    -23.4572    7.1201   37.6975

Puede especificar varias entradas y salidas en gather si desea evaluar varias matrices altas a la vez. Esta técnica es más rápida que llamar a gather varias veces. Por ejemplo, calcule el retraso mínimo y máximo de llegada. Calculado por separado, cada valor requiere un pase a través de los datos para calcular un total de dos pasadas. Sin embargo, la informática de ambos valores requiere simultáneamente sólo un paso a través de los datos.

[max_delay, min_delay] = gather(max(a),min(a))
Evaluating tall expression using the Local MATLAB Session: - Pass 1 of 1: Completed in 1 sec Evaluation completed in 1 sec  max_delay =          1014   min_delay =     -64

Estos resultados indican que en promedio, la mayoría de los vuelos llegan unos 7 minutos tarde. Pero está dentro de una desviación estándar para un vuelo a ser hasta 37 minutos tarde o 23 minutos temprano. El vuelo más rápido en el conjunto de datos llegó aproximadamente una hora antes, y el último vuelo se retrasó por muchas horas.

Guardar, cargar y hacer punto de control de matrices altas

La función save guarda el estado de una matriz alta, pero no copia ninguno de los datos. El archivo .mat resultante es típicamente pequeño. Sin embargo, los archivos de datos originales deben estar disponibles en la misma ubicación para poder utilizar posteriormente load.

La función write hace una copia de los datos y guarda la copia como una colección de archivos binarios, que pueden consumir una gran cantidad de espacio en disco. write ejecuta todas las operaciones pendientes en la matriz alta para calcular los valores antes de escribir. Una vez que write copia los datos, es independiente de los datos RAW originales. Por lo tanto, puede volver a crear la matriz alta a partir de los archivos escritos, incluso si los datos RAW originales ya no están disponibles.

Puede volver a crear la matriz alta a partir de los archivos binarios escritos creando un nuevo almacén de datos que apunte a la ubicación donde se escribieron los archivos. Esta funcionalidad le permite crear checkpoints o instantáneas de datos de arreglo de discos altos. La creación de un punto de comprobación es una buena manera de guardar los resultados de preprocesamiento de los datos, de modo que los datos estén en un formulario que sea más eficiente de cargar.

Si tienes un array alto TA, entonces puedes escribirlo a la carpeta location con el comando:

write(location,TA);

Posteriormente, para reconstruir TA de los archivos escritos, utilice los comandos:

ds = datastore(location); TA = tall(ds);

Además, puede utilizar la función write para desencadenar la evaluación de una matriz alta y escribir los resultados en el disco. Este uso de write es similar a gather, sin embargo, write no trae ningún resultado en la memoria.

Capacidades de Toolbox

Los arreglos de discos altos son soportados por varias cajas de herramientas, permitiéndole hacer cosas como escribir algoritmos de aprendizaje de máquina, implementar aplicaciones independientes y ejecutar cálculos en paralelo o en un clúster. Para obtener más información, consulte Amplíe los arreglos altos con otros productos.

Consulte también

| | | |

Temas relacionados