フィルターのクリア

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 Center および File ExchangeCreating and Concatenating Matrices についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by