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.

Desarrolle algoritmos de matriz alta personalizados

Los arrays altos son una forma poderosa e intuitiva de trabajar con grandes conjuntos de datos usando la sintaxis tradicional.MATLAB® Sin embargo, dado que las matrices altas operan en bloques de datos, cada uno de los cuales encaja individualmente en la memoria, los algoritmos tradicionales de la mayoría de las funciones deben actualizarse para usar un enfoque paralelizado para admitir matrices altas. En este tema se muestra cómo desarrollar sus propios algoritmos paralelizados para operar en matrices altas.

Los enfoques actualmente disponibles para aplicar funciones personalizadas a matrices altas son:

Independientemente de la operación que elija, hay opciones, consideraciones de rendimiento y problemas comunes que se aplican a todos los enfoques.

Razones para implementar algoritmos personalizados

Las funciones y operaciones matemáticas más comunes ya soportan matrices altas.MATLAB Si la funcionalidad ya es compatible, es posible que no sea necesario escribir su propio algoritmo.

Estas son algunas de las razones por las que es posible que desee implementar un algoritmo personalizado para matrices altas:

  • — Si una función determinada no admite actualmente matrices altas, puede utilizar las API descritas aquí para escribir una versión de esa función que admita matrices altas.Implement Currently Unsupported Functions

  • — Si tiene código existente que realiza algunas operaciones en datos en memoria, entonces con solo modificaciones menores puede hacer que sea compatible para operar en matrices altas.Leverage Existing Code Este enfoque evita la necesidad de convertir el código para ajustarse al subconjunto del lenguaje que admite matrices altas.MATLAB

  • — Por ejemplo, puede volver a escribir una función como una función MEX de C++ y, a continuación, puede usar las API descritas aquí para llamar a la función MEX para operar en los datos.Gain PerformanceMATLAB

  • — Para la compatibilidad dentro de su organización a veces es necesario utilizar una biblioteca externa específica para ciertos cálculos.Use a Preferred External Library Puede usar las API descritas aquí para volver a implementar una función con esas bibliotecas externas.

Las API admitidas

Las API admitidas están destinadas a un uso avanzado y no incluyen una extensa comprobación de entrada. Espere pasar algún tiempo probando que las funciones complementarias que implemente satisfacen todos los requisitos y realizan los cálculos esperados. Las API admitidas actualmente para la creación de algoritmos de matriz altos se enumeran aquí.

Nombre de función de paqueteDescripción
matlab.tall.transformAplique una función especificada a cada bloque de uno o más arrays altos.
matlab.tall.reduceAplique una función especificada a cada bloque de uno o más arrays altos. A continuación, alimente la salida de esa función en una segunda función de reducción.
matlab.tall.movingWindowAplique la función de ventana móvil a los bloques de datos.
matlab.tall.blockMovingWindow

Aplicar función de ventana móvil y reducción de bloque a los bloques de datos acolchados.

Fondo: bloques Tall array

Cuando se crea una matriz alta a partir de un almacén de datos, el almacén de datos subyacente facilita el movimiento de la información durante un cálculo. Los datos se mueven en piezas discretas llamadas, donde cada bloque es un conjunto de filas consecutivas que pueden caber en la memoria.blocks Por ejemplo, un bloque de una matriz 2-D (como una tabla) es.X(n:m,:) El tamaño de cada bloque se basa en el valor de la propiedad del almacén de datos, pero el bloque no siempre es ese tamaño exacto.ReadSize Con el fin de desarrollar algoritmos de matriz altos, se considera que una matriz alta es la concatenación vertical de muchos de estos bloques.

Los bloques de una matriz determinada se eligen en tiempo de ejecución en función de la memoria disponible, por lo que pueden ser dinámicos. Por lo tanto, es posible que los bloques no tengan el mismo tamaño entre ejecuciones.exactly Si tiene cambios en el equipo que afectan a la memoria disponible, puede afectar al tamaño de los bloques.

Aunque esta página se refiere sólo a y en un sentido 2-D, estos conceptos se extienden a las matrices de alto N-D.blocksrows El tamaño de bloque solo se restringe en la primera dimensión, por lo que el bloque incluye todos los elementos de otras dimensiones; por ejemplo,.X(n:m,:,:,...) Además, en lugar de filas, las matrices N-D tienen tales como.slicesX(p,:,:,...)

Operación de transformación de un solo paso

La función aplica una sola función a cada bloque de una matriz alta, por lo que puede utilizarla para aplicar una transformación, filtrado o reducción de los datos en bloque.matlab.tall.transform Por ejemplo, puede eliminar filas con valores específicos, centrar y escalar los datos, o detectar ciertas condiciones y transformar fragmentos específicos de datos. Estas cifras muestran lo que sucede con los bloques en una matriz cuando se operan en.matlab.tall.transform

Operación

Descripción

Ejemplos

: El número de filas de cada bloque sigue siendo el mismo, pero los valores cambian.Transformation

  • calcula el seno de los elementos de cada bloque.A = matlab.tall.transform(@sin, tX)

  • cuadrados los elementos de cada bloque.A = matlab.tall.transform(@(X) X.^2, tX)

: El número de filas de cada bloque se reduce, por lo que los bloques de la nueva matriz pueden incluir filas originalmente presentes en otros bloques.Filtering

  • Extrae solo las 5 filas superiores de cada bloque, filtrando las otras filas.A = matlab.tall.transform(@(X) topkrows(X,5), tX)

  • calcula la suma de los elementos de cada bloque, lo que reduce cada bloque a un escalar.A = matlab.tall.transform(@sum, tX) El número de elementos en es igual al número de bloques.A

Transformar sintaxis

La sintaxis genérica para aplicar una transformación de un solo paso es

[tA, tB, tC, ...] = matlab.tall.transform(fcn, tX, tY, tZ, ...)

Requisitos funcionales parafcn

La firma funcional general de es debe cumplir con estos requisitos:fcn

[a, b, c, ...] = fcn(x, y, z, ...)
fcn

  1. — Las entradas son bloques de datos que caben en la memoria.Input Arguments[x, y, z, ...] Los bloques se producen mediante la extracción de datos de las respectivas entradas de matriz alta.[tX, tY, tZ, ...] Las entradas satisfacen estas propiedades:[x, y, z, ...]

    • Todos tienen el mismo tamaño en la primera dimensión después de cualquier expansión permitida.[x, y, z, ...]

    • Los bloques de datos vienen del mismo índice en la cota alta, suponiendo que la matriz alta es nonsingleton en la cota alta.[x, y, z, ...] Por ejemplo, si y son nonsingleton en la dimensión alta, el primer conjunto de bloques puede ser y.tXtYx = tX(1:20000,:)y = tY(1:20000,:)

    • Si la primera dimensión de cualquiera de tiene un tamaño de, entonces el bloque correspondiente consta de todos los datos en esa matriz alta.[tX, tY, tZ, ...]1[x, y, z, ...]

  2. — Las salidas son bloques que caben en la memoria, que se enviarán a las salidas respectivas.Output Arguments[a, b, c, ...][tA, tB, tC, ...] Las salidas satisfacen estas propiedades:[a, b, c, ...]

    • Todos deben tener el mismo tamaño en la primera dimensión.[a, b, c, ...]

    • Todos están concatenados verticalmente con los respectivos resultados de las llamadas anteriores a.[a, b, c, ...]fcn

    • Todos se envían al mismo índice en la primera dimensión en sus respectivas matrices de salida de destino.[a, b, c, ...]

  3. — debe cumplir la regla funcional:Functional Rulesfcn

    • :F([inputs1; inputs2]) == [F(inputs1); F(inputs2)] Aplicar la función a la concatenación de las entradas debe ser el mismo que aplicar la función a las entradas por separado y luego concatenar los resultados.

  4. — Asegúrese de que puede manejar una entrada que tenga una altura de 0.Empty Inputsfcn Las entradas vacías pueden ocurrir cuando un archivo está vacío o si ha hecho mucho filtrado en los datos.

Operación de reducción de dos pasos

aplica dos funciones a una matriz alta, con el resultado del primer paso que se alimenta como entrada a un paso de reducción final.matlab.tall.reduce La función de reducción se aplica repetidamente a los resultados intermedios hasta que se obtiene un único bloque final que encaja en la memoria. En el paradigma MapReduce, este proceso es similar a una operación MapReduce de "clave única", donde los resultados intermedios tienen la misma clave y se combinan en el paso de reducción.

El primer paso es similar y tiene los mismos requisitos.matlab.tall.transform Sin embargo, el paso de reducción siempre reduce los resultados intermedios a un solo bloque que encaja en la memoria. Estas cifras muestran lo que sucede con los bloques en una matriz cuando se operan en.matlab.tall.reduce

Operación

Descripción

Ejemplos

: El número de filas de cada bloque sigue siendo el mismo después del primer paso y, a continuación, los resultados intermedios se reducen a un bloque.Transformation + Reduction

  • calcula el seno de cada bloque de valores y, a continuación, encuentra el valor máximo general durante el paso de reducción.A = matlab.tall.reduce(@sin,@max,tX)

  • cuadrados los elementos de cada bloque y, a continuación, calcula la media general en el paso de reducción.A = matlab.tall.reduce(@(X) X.^2, @mean, tX)

: El número de filas de cada bloque se reduce en el primer paso.Filtering + Reduction A continuación, los resultados intermedios se reducen a un bloque.

  • calcula la suma de los elementos de cada bloque y, a continuación, encuentra la suma total de los elementos en el paso de reducción.A = matlab.tall.reduce(@sum, @sum, tX)

  • filtra todos los valores negativos y, a continuación, calcula la media general de los valores restantes.A = matlab.tall.reduce(@(X) X(X>0), @mean, tX)

Reduzca la sintaxis

La sintaxis genérica para aplicar una reducción de dos pasos es

[rA, rB, rC, ...] = matlab.tall.reduce(fcn, reducefcn, tX, tY, tZ, ...)

La firma funcional de esfcn

[a, b, c, ...] = fcn(x, y, z, ...)

La firma funcional de esreducefcn

[rA, rB, rC, ...] = reducefcn(a, b, c, ...)

Es decir, los arrays altos de entrada se dividen en bloques que son entradas.[tX, tY, tZ, ...][x, y, z, ...]fcn A continuación, devuelve las salidas que son entradas a.fcn[a, b, c, ...]reducefcn Por último, devuelve los resultados finales devueltos por.reducefcn[rA, rB, rC]matlab.tall.reduce

Requisitos funcionales parareducefcn

Los requisitos para son los mismos que los que se describen en.fcnRequisitos funcionales parafcn Sin embargo, los requisitos para son diferentes.reducefcn

La firma funcional general de es debe cumplir con estos requisitos:reducefcn

[rA, rB, rC, ...] = reducefcn(a, b, c, ...)
reducefcn

  1. — Las entradas son bloques que caben en la memoria.Input Arguments[a, b, c, ...] Los bloques de datos son salidas devueltas por, o una salida parcialmente reducida de la que se está accionando de nuevo para una mayor reducción.fcnreducefcn Las entradas satisfacen estas propiedades:[a, b, c, ...]

    • Las entradas tienen el mismo tamaño en la primera dimensión.[a, b, c, ...]

    • Para un índice determinado en la primera dimensión, cada fila de los bloques de datos se origina a partir de la entrada, o se origina de la misma llamada anterior a.[a, b, c, ...]reducefcn

    • Para un índice determinado en la primera dimensión, cada fila de las entradas de ese índice se origina en el mismo índice de la primera dimensión.[a, b, c, ...]

  2. : Todas las salidas deben tener el mismo tamaño en la primera dimensión.Output Arguments[rA, rB, rC, ...] Además, deben ser concatenable verticalmente con las entradas respectivas para permitir reducciones repetidas cuando sea necesario.[a, b, c, ...]

  3. — deben cumplir estas reglas funcionales (error de hasta redondeo):Functional Rulesreducefcn

    • :F(input) == F(F(input)) La aplicación repetida de la función a las mismas entradas no debe cambiar el resultado.

    • :F([input1; input2]) == F([input2; input1]) El resultado no debe depender del orden de la concatenación.

    • :F([input1; input2]) == F([F(input1); F(input2)]) Aplicar la función una vez a la concatenación de algunos resultados intermedios debe ser el mismo que aplicarlo por separado, concatenando y aplicando de nuevo.

  4. — Asegúrese de que puede manejar una entrada que tenga una altura de 0.Empty Inputsreducefcn Las entradas vacías pueden ocurrir cuando un archivo está vacío o si ha hecho mucho filtrado en los datos. Para esta llamada, todos los bloques de entrada son matrices vacías del tipo y tamaño correctos en dimensiones más allá de la primera.

Operaciones de ventana deslizante

Las funciones y aplican una función a las ventanas de datos dentro de una matriz alta.matlab.tall.movingWindowmatlab.tall.blockMovingWindow Mientras y operan en bloques enteros de datos a la vez, las funciones de ventana móvil operan en ventanas de datos.matlab.tall.transformmatlab.tall.reduce Las ventanas pueden abarcar entre los bloques de datos que se leen desde el disco.

Estas cifras muestran lo que sucede con los bloques en una matriz cuando son operados por o.matlab.tall.movingWindowmatlab.tall.blockMovingWindow

OperaciónDescripciónEjemplos

: El número de filas de cada bloque sigue siendo el mismo, pero los valores cambian.Windowed Transformation La salida contiene los resultados de las operaciones realizadas tanto en ventanas incompletas como completas de datos.

Ambos y transformar los datos cuando es el valor predeterminado de, o cuando se especifica un valor de relleno.matlab.tall.movingWindowmatlab.tall.blockMovingWindow'EndPoints''shrink' Ambos valores aseguran que la salida es del mismo tamaño en la primera dimensión que la entrada.

  • calcula una media móvil utilizando un tamaño de ventana de 100.A = matlab.tall.movingWindow(@mean, 100, tX)

— Se descartan las ventanas incompletas de datos, por lo que la salida tiene menos elementos que la entrada.Windowed Filtering La salida solo contiene los resultados de las operaciones realizadas en ventanas completas de datos.

Tanto y eliminar ventanas incompletas de datos cuando es.matlab.tall.movingWindowmatlab.tall.blockMovingWindow'EndPoints''discard'

  • calcula una media móvil en ventanas completas de datos, utilizando un tamaño de ventana de 100.A = matlab.tall.movingWindow(@mean, 100, tX, 'EndPoints', 'discard')

Puede usar y aplicar transformaciones o filtros de ventana a los datos.matlab.tall.movingWindowmatlab.tall.blockMovingWindow Por ejemplo, puede calcular un promedio final o una mediana móvil, o puede aplicar varias operaciones a la vez en la misma ventana. Las dos funciones difieren de estas maneras:

  • se aplica a todas las ventanas de datos, independientemente de si las ventanas están completas. se aplica a las ventanas de datos incompletas y se aplica a las ventanas completas de datos.matlab.tall.movingWindowfcnmatlab.tall.blockMovingWindowwindowfcnblockfcn

  • opera en una sola ventana de datos a la vez. opera en bloques enteros de datos que contienen múltiples ventanas completas, lo que reduce el número de llamadas de función requeridas en el cálculo.matlab.tall.movingWindowmatlab.tall.blockMovingWindow

Moviendo Syntaxes ventana

La sintaxis para aplicar una operación de ventana móvil a ventanas individuales de datos es

[tA, tB, tC, ...] = matlab.tall.movingWindow(fcn, window, tX, tY, tZ, ...)

La firma funcional de debe serfcn

[a, b, c, ...] = fcn(x, y, z, ...)

De forma similar, la sintaxis para aplicar una operación de ventana móvil a bloques enteros de datos es

[tA, tB, tC, ...] = matlab.tall.blockMovingWindow(windowfcn, blockfcn, window, tX, tY, tZ, ...)

Las firmas funcionales de y deben serwindowfcnblockfcn

[a, b, c, ...] = windowfcn(info, x, y, z, ...) [a, b, c, ...] = blockfcn(info, bX, bY, bZ, ...)

La entrada es una estructura que contiene los campos y.infoWindowStride Al escribir la función. utilizar estos campos para seleccionar ventanas de datos en cada bloque.

Para un esquema de las reglas generales que, y debe seguir, ver.fcnwindowfcnblockfcnRequisitos funcionales parafcn Aparte de la entrada, y tienen los mismos requisitos.infofcnwindowfcn Sin embargo, los requisitos para son diferentes ya que esa función funciona en bloques enteros de datos.blockfcn

Requisitos funcionales parawindowfcn

La firma funcional general de es la entrada es una estructura proporcionada por que incluye estos campos:windowfcn

[a, b, c, ...] = windowfcn(info, x, y, ...)
infomatlab.tall.blockMovingWindow

  • — Tamaño de paso especificado entre ventanas (por defecto: 1).Stride Establezca este valor con el par nombre-valor.'Stride'

  • — Tamaño de ventana especificado.Window Establezca este valor con el argumento de entrada.window

deben cumplir estos requisitos:windowfcn

  1. — Las entradas son bloques de datos que caben en la memoria.Input Arguments[x, y, z, ...] Los bloques se producen mediante la extracción de datos de las respectivas entradas de matriz alta.[tX, tY, tZ, ...] Las entradas satisfacen estas propiedades:[x, y, z, ...]

    • Todas las entradas tienen el mismo tamaño en la primera dimensión después de cualquier expansión permitida.[x, y, z, ...]

    • Los bloques de datos vienen del mismo índice en la cota alta, suponiendo que la matriz alta es nonsingleton en la cota alta.[x, y, z, ...] Por ejemplo, si y son nonsingleton en la dimensión alta, el primer conjunto de bloques puede ser y.tXtYx = tX(1:20000,:)y = tY(1:20000,:)

    • Cuando la primera dimensión de cualquiera de tiene un tamaño de, el bloque correspondiente consta de todos los datos en esa matriz alta.[tX, tY, tZ, ...]1[x, y, z, ...]

    • La aplicación debe dar como resultado una reducción de los datos de entrada a un escalar o un segmento de una matriz de altura 1.windowfcn

      Cuando la entrada es una matriz, una matriz N-D, una tabla o un cronograma, la aplicación debe dar como resultado una reducción de los datos de entrada en cada una de sus columnas o variables.windowfcn

  2. — Las salidas son bloques que caben en la memoria que se enviarán a las salidas respectivas.Output Arguments[a, b, c, ...][tA, tB, tC, ...] Las salidas satisfacen estas propiedades:[a, b, c, ...]

    • Todas las salidas deben tener el mismo tamaño en la primera dimensión.[a, b, c, ...]

    • Todas las salidas se concatenan verticalmente con los respectivos resultados de las llamadas anteriores a.[a, b, c, ...]windowfcn

    • Todas las salidas se envían al mismo índice en la primera dimensión en sus respectivas matrices de salida de destino.[a, b, c, ...]

  3. — debe cumplir esta regla funcional:Functional Ruleswindowfcn

    • :F([inputs1; inputs2]) == [F(inputs1); F(inputs2)] Aplicar la función a la concatenación de las entradas debe ser el mismo que aplicar la función a las entradas por separado y luego concatenar los resultados.

  4. — Asegúrese de que puede manejar una entrada que tenga una altura de 0.Empty Inputswindowfcn Las entradas vacías pueden ocurrir cuando un archivo está vacío o si ha hecho mucho filtrado en los datos.

Requisitos funcionales parablockfcn

La firma funcional general de es la entrada es una estructura proporcionada por que incluye estos campos:blockfcn

[a, b, c, ...] = blockfcn(info, bX, bY, bZ, ...)
infomatlab.tall.blockMovingWindow

  • — Tamaño de paso especificado entre ventanas (por defecto: 1).Stride Establezca este valor con el par nombre-valor.'Stride'

  • — Tamaño de ventana especificado.Window Establezca este valor con el argumento de entrada.window

Los bloques de datos que proporcionan estas propiedades:bX, bY, bZ, ...matlab.tall.blockMovingWindowblockfcn

  • Los bloques solo contienen ventanas de tamaño completo. no tiene que definir un comportamiento para ventanas de datos incompletas.blockfcn

  • La primera ventana de datos comienza en el primer elemento del bloque. El último elemento de la última ventana es el último elemento del bloque.

deben cumplir estos requisitos:blockfcn

  1. — Las entradas son bloques de datos que caben en la memoria.Input Arguments[bX, bY, bZ, ...] Los bloques se producen mediante la extracción de datos de las respectivas entradas de matriz alta.[tX, tY, tZ, ...] Las entradas satisfacen estas propiedades:[bX, bY, bZ, ...]

    • Todas las entradas tienen el mismo tamaño en la primera dimensión después de cualquier expansión permitida.[bX, bY, bZ, ...]

    • Los bloques de datos vienen del mismo índice en la cota alta, suponiendo que la matriz alta es nonsingleton en la cota alta.[bX, bY, bZ, ...] Por ejemplo, si y son nonsingleton en la dimensión alta, el primer conjunto de bloques puede ser y.tXtYbX = tX(1:20000,:)bY = tY(1:20000,:)

    • Si la primera dimensión de cualquiera de las entradas de datos tiene un tamaño de, entonces el bloque correspondiente consta de todos los datos en esa matriz alta.[tX, tY, tZ, ...]1[bX, bY, bZ, ...]

    • La aplicación debe dar lugar a una reducción de los datos de entrada, de forma que el resultado tenga una altura igual al número de ventanas del bloque.blockfcn Puede utilizar y determinar el número de ventanas de un bloque.info.Windowinfo.Stride

      Si la entrada es una matriz, una matriz N-D, una tabla o un cronograma, la aplicación debe dar como resultado una reducción de los datos de entrada en cada una de sus columnas o variables.blockfcn

  2. — Las salidas son bloques que caben en la memoria, que se enviarán a las salidas respectivas.Output Arguments[a, b, c, ...][tA, tB, tC, ...] Las salidas satisfacen estas propiedades:[a, b, c, ...]

    • Todas las salidas deben tener el mismo tamaño en la primera dimensión.[a, b, c, ...]

    • Todas las salidas se concatenan verticalmente con los respectivos resultados de las llamadas anteriores a.[a, b, c, ...]blockfcn

    • Todas las salidas se envían al mismo índice en la primera dimensión en sus respectivas matrices de salida de destino.[a, b, c, ...]

  3. — debe cumplir esta regla funcional:Functional Rulesblockfcn

    • :F([inputs1; inputs2]) == [F(inputs1); F(inputs2)] Aplicar la función a la concatenación de las entradas debe ser el mismo que aplicar la función a las entradas por separado y luego concatenar los resultados.

  4. — Asegúrese de que puede manejar una entrada que tenga una altura de 0.Empty Inputsblockfcn Las entradas vacías pueden ocurrir cuando un archivo está vacío o si ha hecho mucho filtrado en los datos.

Tipo de datos de salida de control

Si el resultado final de cualquiera de los tiene un tipo de datos diferente de la entrada, especifique el par nombre-valor para proporcionar uno o más matrices de prototipo que tienen el mismo tipo de datos y atributos que las salidas correspondientes.Las API admitidasmust'OutputsLike' El valor de siempre es una matriz de celdas, con cada celda que contiene una matriz de prototipo para el argumento de salida correspondiente.'OutputsLike'

Por ejemplo, esta llamada a acepta una matriz alta como entrada y devuelve dos salidas con tipos diferentes especificados por los arrays prototipo y.matlab.tall.transformtXprotoAprotoB La salida tiene el mismo tipo de datos y atributos que, y también para y.AprotoABprotoB

C = {protoA protoB}; [A, B] = matlab.tall.transform(fcn, tX, 'OutputsLike', C)

Una forma habitual de suministrar las matrices prototipo es llamar con entradas triviales del tipo de datos adecuado, ya que las salidas devueltas tienen el tipo de datos correcto.fcnfcn En este ejemplo, la función de transformación acepta un doble alto, pero devuelve una tabla alta. Una matriz de prototipo se genera mediante una llamada y el prototipo se especifica como el valor de.fcn(0)'OutputsLike'

ds = tabularTextDatastore('airlinesmall.csv','TreatAsMissing','NA'); ds.SelectedVariableNames = {'ArrDelay', 'DepDelay'}; tt = tall(ds); tX = tt.ArrDelay;  fcn = @(x) table(x,'VariableNames',{'MyVar'}); proto_A = fcn(0); A = matlab.tall.transform(fcn,tX,'OutputsLike',{proto_A});

Consejos de codificación y rendimiento

  • Coloque todos los análisis en una sola función a la que llame para operar directamente en los datos, en lugar de usar funciones anidadas innecesarias.

  • Experimente con un pequeño subconjunto de los datos. Perfique el código para buscar y corregir los cuellos de botella antes de escalar el conjunto de datos completo, donde los cuellos de botella pueden amplificarse considerablemente.

  • Preste atención a la orientación de sus datos, ya que algunas funciones devuelven las salidas en diferentes formas dependiendo de los datos de entrada. Por ejemplo, puede devolver un vector de fila o un vector de columna dependiendo de la orientación de los datos de entrada.unique

  • Los bloques se generan dinámicamente en tiempo de ejecución en función de la memoria del equipo disponible. Asegúrese de que cualquier función de reducción especificada obedezca a la regla de función.F([input1; input2]) == F([F(input1); F(input2)]) Si no se obedece esta regla, los resultados pueden diferir significativamente entre los ensayos.

  • Los bloques pueden tener cualquier tamaño en la primera dimensión, incluyendo 0 o 1. El tamaño 0 o 1 puede ocurrir en los cálculos intermedios como resultado de las operaciones de filtrado o reducción. Asegúrese de que su función haga lo correcto para ambos casos. Una señal de que la función no maneja estos casos correctamente es cuando recibe un mensaje de error "Output is diferente size".

Consulte también

| | |

Temas relacionados