How to repshape array to matrix with different length of each row ?

3 visualizaciones (últimos 30 días)
Lets assume we have array M with size 1*100
M= [1 2 3 4 5 6 7 8 9 0 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 9 2 ....]
I need to rephase it to B matrix that have 12 rows with max column 9
B = [1 2 3 4 5 6 7 8 9 ; 0 1 1 1 1 1 1 1 NAN ; 1 1 2 2 2 2 2 2 9 2; ... etc]
if we notice the first row is 1*9
second row is 1*8
third row is 1*10
and so on until we fill all the 12 rows. The sizes for the rows [9 8 10 8 9 8 8 8 8 9 8 7]
I just make up this example becuase my array is too long and I need to divid it depend on three numbers which is 28, 31,30
I tried to make if loop to implmemt it but I cannot it's completely worng.

Respuesta aceptada

Cris LaPierre
Cris LaPierre el 22 de Mzo. de 2020
MATLAB has the function reshape, but there are a couple things to be aware of when using it:
  1. The number of elements can't change, meaning the product of the dimensions of your array have to exactly match the product of the dimensions of your array.
  2. Each row/column will have the same number of elements (unless you want to get into cell arrays)
  6 comentarios
Cris LaPierre
Cris LaPierre el 22 de Mzo. de 2020
Editada: Cris LaPierre el 22 de Mzo. de 2020
Here's a sample assuming the vector is 1x100
% Create dummy data
test = randi(20,[1 100]);
brks = [9 8 10 8 9 8 8 8 8 9 8 7]
ind = [0 cumsum(brks)]
% preallocate vector with NaNs
matrix = nan([12 max(brks)])
for r = 1:length(brks)
matrix(r,1:brks(r)) = test((ind(r)+1):ind(r+1));
end

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Creating and Concatenating Matrices en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by