필터 지우기
필터 지우기

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

조회 수: 2 (최근 30일)
Willim
Willim 2020년 3월 22일
댓글: Willim 2020년 3월 22일
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.

채택된 답변

Cris LaPierre
Cris LaPierre 2020년 3월 22일
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
Cris LaPierre
Cris LaPierre 2020년 3월 22일
편집: Cris LaPierre 2020년 3월 22일
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 2020년 3월 22일
This works Thank you

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by