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.

Evaluación diferida de matrices altas

Una de las diferencias entre matrices altas y matrices en memoria es que las matrices altas suelen permanecer hasta que solicite que se realicen cálculos.MATLAB®unevaluated (Las excepciones a esta regla incluyen funciones de trazado como y y algunas funciones de ajuste estadístico como, que evalúan automáticamente las entradas de matriz altas.)plothistogramfitlm Aunque una matriz alta está en un estado no evaluado, es posible que no conozca su tamaño, su tipo de datos o los valores específicos que contiene.MATLAB Sin embargo, todavía puede usar matrices no evaluadas en sus cálculos como si los valores fueran conocidos. Esto le permite trabajar rápidamente con grandes conjuntos de datos en lugar de esperar a que cada comando se ejecute. Por este motivo, se recomienda que solo se utilice cuando se requiera una salida.gather

realiza un seguimiento de todas las operaciones que realiza en matrices altas no evaluadas a medida que las ingresa.MATLAB Cuando finalmente llame para evaluar las operaciones en cola, utiliza el historial de comandos no evaluados para optimizar el cálculo minimizando el número de pasadas a través de los datos.gatherMATLAB Esta optimización, que se utiliza correctamente, puede ahorrar grandes cantidades de tiempo de ejecución eliminando pases innecesarios a través de grandes conjuntos de datos.

Visualización de matrices altas no evaluadas

La visualización de matrices altas no evaluadas varía en función de la cantidad que sepa sobre la matriz y sus valores.MATLAB Hay tres elementos de información reflejados en la pantalla:

  • — Los tamaños de cota desconocidos se representan mediante las variables o en la visualización.Array sizeMN Si no se conocen tamaños de cota, el tamaño aparece como.MxNx....

  • : Si la matriz tiene un tipo de datos subyacente desconocido, su tipo aparece como.Array data typetall array Si se conoce el tipo, aparece como, por ejemplo,.tall double array

  • : Si los valores de la matriz son desconocidos, aparecerán como.Array values? Se muestran los valores conocidos.

puede saber todo, algunos o ninguno de estos fragmentos de información sobre un array alto dado, dependiendo de la naturaleza del cálculo.MATLAB

Por ejemplo, si la matriz tiene un tipo de datos conocido pero un tamaño y valores desconocidos, la matriz alta no evaluada podría tener este aspecto:

M×N×... tall double array      ?    ?    ?    ...     ?    ?    ?    ...     ?    ?    ?    ...     :    :    :     :    :    :

Si se conocen el tipo y el tamaño relativo, la pantalla podría ser:

 1×N tall char array      ?    ?    ?   ... 

Si se conocen algunos de los datos, a continuación, muestra los valores conocidos:MATLAB

  100×3 tall double matrix      0.8147    0.1622    0.6443     0.9058    0.7943    0.3786     0.1270    0.3112    0.8116     0.9134    0.5285    0.5328     0.6324    0.1656    0.3507     0.0975    0.6020    0.9390     0.2785    0.2630    0.8759     0.5469    0.6541    0.5502       :         :         :       :         :         :

Evaluación congather

La función se utiliza para evaluar matrices altas. acepta matrices altas como entradas y devuelve matrices en memoria como salidas.gathergather Por este motivo, puede pensar en esta función como un puente entre matrices altas y matrices en memoria. Por ejemplo, no puede controlar o las sentencias de bucle utilizando una matriz lógica alta, pero una vez que se evalúa la matriz con ella se convierte en un valor lógico en memoria que puede utilizar en estos contextos.ifwhilegather

realiza todas las operaciones en cola en una matriz alta y devuelve el resultado en la memoria.gatherentire Dado que devuelve resultados como matrices en memoria, se aplican consideraciones de memoria estándar. podría ejecutarse sin memoria si el resultado devuelto es demasiado grande.gatherMATLABMATLABgather

La mayoría de las veces puede usar para ver el resultado completo de un cálculo, especialmente si el cálculo incluye una operación de reducción como o.gathersummean Sin embargo, si el resultado es demasiado grande para caber en la memoria, puede usar o realizar el cálculo y ver solo las primeras o últimas filas del resultado.gather(head(X))gather(tail(X))

Resolver errores congather

Si escribe un comando erróneo y no evalúa una variable de matriz alta, debe eliminar la variable de su espacio de trabajo y volver a crear la matriz alta con comandos válidos.gatheronly Esto se debe a que realiza un seguimiento de todas las operaciones que realiza en matrices altas no evaluadas a medida que las ingresa.MATLAB La única manera de hacer "olvidar" una declaración errónea es reconstruir la matriz alta desde cero.MATLAB

Ejemplo: calcular el tamaño de la matriz alta

Este ejemplo muestra qué aspecto tiene una matriz alta no evaluada y cómo evaluar la matriz.

Cree un datastore para el conjunto de datos.airlinesmall.csv Convierta el almacén de datos en una tabla alta y, a continuación, calcule el tamaño.

varnames = {'ArrDelay', 'DepDelay', 'Origin', 'Dest'}; ds = datastore('airlinesmall.csv', 'TreatAsMissing', 'NA', ... 'SelectedVariableNames', varnames); tt = tall(ds)
tt =    M×4 tall table      ArrDelay    DepDelay    Origin    Dest      ________    ________    ______    _____          8          12       'LAX'     'SJC'         8           1       'SJC'     'BUR'        21          20       'SAN'     'SMF'        13          12       'BUR'     'SJC'         4          -1       'SMF'     'LAX'        59          63       'LAX'     'SJC'         3          -2       'SAN'     'SFO'        11          -1       'SEA'     'LAX'        :           :          :         :        :           :          :         :
s = size(tt)
s =    1×2 tall double row vector      ?    ?  Preview deferred. Learn more.

Calcular el tamaño de un array alto devuelve una pequeña respuesta (un vector 1-por-2), pero la pantalla indica que un paso completo a través de los datos sigue siendo necesario para calcular el tamaño de.tt

Utilice la función para evaluar completamente la matriz alta y llevar los resultados a la memoria.gather A medida que se ejecuta el comando, hay una pantalla de progreso dinámico en la ventana de comandos que es particularmente útil con cálculos largos.

Nota

Siempre asegúrese de que el resultado devuelto por será capaz de caber en la memoria.gather Si utiliza directamente en una matriz alta sin reducir su tamaño mediante una función como, a continuación, podría ejecutarse fuera de la memoria.gathermeanMATLAB

tableSize = gather(s)
Evaluating tall expression using the Local MATLAB Session: - Pass 1 of 1: Completed in 0.42 sec Evaluation completed in 0.48 sec  tableSize =        123523           4

Ejemplo: cálculos de paso múltiple con matrices altas

En este ejemplo se muestra cómo se pueden combinar varios cálculos para minimizar el número total de pasadas a través de los datos.

Cree un datastore para el conjunto de datos.airlinesmall.csv Convierta el almacén de datos en una tabla alta.

varnames = {'ArrDelay', 'DepDelay', 'Origin', 'Dest'}; ds = datastore('airlinesmall.csv', 'TreatAsMissing', 'NA', ... 'SelectedVariableNames', varnames); tt = tall(ds)
tt =    M×4 tall table      ArrDelay    DepDelay    Origin    Dest      ________    ________    ______    _____          8          12       'LAX'     'SJC'         8           1       'SJC'     'BUR'        21          20       'SAN'     'SMF'        13          12       'BUR'     'SJC'         4          -1       'SMF'     'LAX'        59          63       'LAX'     'SJC'         3          -2       'SAN'     'SFO'        11          -1       'SEA'     'LAX'        :           :          :         :        :           :          :         :

Reste el valor medio de from para crear una nueva variable.DepDelayArrDelayAdjArrDelay A continuación, calcule el valor medio de y reste este valor medio de.AdjArrDelayAdjArrDelay Si todos estos cálculos se evaluaran por separado, entonces requerirían cuatro pases a través de los datos.MATLAB

AdjArrDelay = tt.ArrDelay - mean(tt.DepDelay,'omitnan'); AdjArrDelay = AdjArrDelay - mean(AdjArrDelay,'omitnan')
AdjArrDelay =    M×1 tall double column vector      ?     ?     ?     :     :  Preview deferred. Learn more.

Evalúe y visualice las primeras filas.AdjArrDelay Dado que algunos cálculos se pueden combinar, solo se requieren tres pasadas a través de los datos.

gather(head(AdjArrDelay))
Evaluating tall expression using the Local MATLAB Session: - Pass 1 of 3: Completed in 0.4 sec - Pass 2 of 3: Completed in 0.39 sec - Pass 3 of 3: Completed in 0.23 sec Evaluation completed in 1.2 sec  ans =      0.8799     0.8799    13.8799     5.8799    -3.1201    51.8799    -4.1201     3.8799

Resumen de comportamiento y recomendaciones

  1. Las matrices altas permanecen sin evaluar hasta que se solicita la salida mediante.gather

  2. Utilice en la mayoría de los casos para evaluar cálculos de matriz altos.gather Si cree que el resultado de los cálculos podría no caber en la memoria, a continuación, utilice o en su lugar.gather(head(X))gather(tail(X))

  3. Trabaje principalmente con matrices altas no evaluadas y la salida de solicitudes solo cuando sea necesario. Los cálculos más en cola que hay no evaluados, más optimización puede hacer para minimizar el número de pasadas a través de los datos.MATLAB

  4. Si introduce un comando de matriz alto erróneo y no evalúa una variable de matriz alta, debe eliminar la variable del espacio de trabajo y volver a crear la matriz alta con comandos válidos.gatheronly

Consulte también

|

Temas relacionados