Effacer les filtres
Effacer les filtres

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

2 vues (au cours des 30 derniers jours)
Willim
Willim le 22 Mar 2020
Commenté : Willim le 22 Mar 2020
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.

Réponse acceptée

Cris LaPierre
Cris LaPierre le 22 Mar 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 commentaires
Cris LaPierre
Cris LaPierre le 22 Mar 2020
Modifié(e) : Cris LaPierre le 22 Mar 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
Willim
Willim le 22 Mar 2020
This works Thank you

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Creating and Concatenating Matrices dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by