HOWTO · MATLAB

Cómo agregar un vector a una matriz 3D en MATLAB

Este artículo lo guiará a través de las formas de agregar un vector a una matriz 3D en MATLAB.

En esta página

MATLAB almacena un arreglo 3D como filas, columnas y páginas. Para agregar una página compatible al final, concatene a lo largo de la dimensión 3 con cat(3, A, page), o asígnela con A(:,:,end+1) = page. La nueva página debe tener las mismas dimensiones de fila y columna que cada página existente. Un vector fila es una página completa cuando cada página tiene una fila; un vector columna es una página completa cuando cada página tiene una columna.

Comprender las páginas de una matriz 3D y la compatibilidad de tamaños

Un arreglo 3D tiene su dimensión de fila en primer lugar, la dimensión de columna en segundo lugar y la dimensión de página en tercer lugar. Por ejemplo, un arreglo de tamaño 2-by-3-by-4 contiene cuatro páginas, cada una con dos filas y tres columnas. MATLAB muestra esas páginas por separado, y un elemento se direcciona mediante índices de fila, columna y página como A(1,2,3). Para seleccionar una página completa, use A(:,:,k); por ejemplo, A(:,:,3) selecciona la tercera página.

Agregar a lo largo de la tercera dimensión aumenta el número de páginas manteniendo fijas las dos primeras dimensiones. Si A tiene tamaño M-by-N-by-P, la página que agregue debe ser M-by-N, de modo que el resultado tenga tamaño M-by-N-by-(P+1). Un vector puede servir directamente como esa página solo cuando su orientación y longitud coinciden con la forma de la página: un vector fila 1-by-N encaja en una página de una fila, mientras que un vector columna M-by-1 encaja en una página de una columna. Para una página general M-by-N, organice primero los valores en una matriz M-by-N.

3d matrix

Agregar un vector como una página nueva con cat

Use cat(3, A, page) para unir page al final de A a lo largo de la dimensión de página. El primer argumento selecciona la dimensión; usar cat(1, ...) agrega filas y cat(2, ...) agrega columnas. Las dimensiones restantes deben coincidir, razón por la cual el vector siguiente tiene dos entradas y las páginas existentes tienen cada una una fila y dos columnas.

Este ejemplo de MATLAB compatible con Octave crea dos páginas y luego agrega el vector fila como tercera página:

A = reshape(1:4, 1, 2, 2);
page = [5 6];
A = cat(3, A, page);
disp(size(A));
disp(A(:,:,3));
   1   2   3
   5   6

El nuevo arreglo tiene tres páginas. Su tercera página contiene los valores de page en el mismo orden. En MATLAB, cat() es útil cuando desea crear un nuevo valor de arreglo a partir del arreglo original y la página agregada; asigne el resultado de nuevo a A cuando desee actualizar esa variable.

Agregar un vector como una página nueva con indexación

La asignación indexada es una alternativa al método cat. Comience con el A original de dos páginas del ejemplo anterior, antes de que se ejecute su línea cat, y use A(:,:,end+1) = page; en lugar de esa línea. No ejecute ambas instrucciones de agregado en secuencia: la asignación también extiende la tercera dimensión, por lo que ejecutarla después de cat agregaría una cuarta página. Aquí end se refiere al último índice a lo largo de la tercera dimensión, y end+1 selecciona la página siguiente.

Use esta forma cuando actualizar A directamente sea lo más claro. La page asignada debe coincidir con las dimensiones de fila y columna existentes; organice primero el vector cuando su orientación o longitud no encaje en la forma de la página.

Preparar un vector que coincida con el tamaño de la página

Si el vector es más corto que la página, decida qué deben representar las entradas restantes antes de agregarlo. Cuando los ceros sean significativos, cree una página con las dimensiones requeridas y coloque los valores del vector en las posiciones previstas. Por ejemplo, para una página 2-by-3 cuya primera columna contiene un vector columna de dos elementos, una construcción como [values(:), zeros(2,2)] hace que las otras dos columnas sean cero. Luego agregue esa página con cualquiera de los métodos anteriores.

El relleno es una decisión sobre los datos, no una conversión de forma que siempre sea segura: los ceros pasan a formar parte de la página almacenada y pueden afectar a cálculos posteriores. Si los valores faltantes tienen otro significado, use los valores de relleno adecuados o reforme/reordene los datos de origen en su lugar. Antes de concatenar o asignar, compare size(A,1) y size(A,2) con la primera y la segunda dimensión de la página. Esto facilita localizar una discrepancia de dimensiones y mantiene explícito el diseño previsto de filas y columnas.

Reemplazar una fila, columna o página mediante indexación

Reemplazar contenido existente es diferente de agregar una página. Por ejemplo, A(1,:,1) = replacementRow; reemplaza la primera fila de la primera página, mientras que A(:,:,1) = replacementPage; reemplaza una página existente completa. El reemplazo debe tener el mismo número de elementos y dimensiones compatibles que la región indexada.

Use un índice existente cuando el objetivo sea actualizar datos que ya están en el arreglo. Use end+1 en el tercer índice cuando el objetivo sea agregar una página después de la última página actual. Esta distinción ayuda a evitar que una asignación sobrescriba una página cuando su intención era conservar los datos existentes y agregar otra.