For Loop Indexing of matrices
1 次查看(过去 30 天)
显示 更早的评论
I have a matrix of dimensions 36x25x355.
I would like to extract 36x25 arrays from this data and index them 1,2,3 and so on, as descrtibed in attached picture. I would like to be able to do this for any size matrix multipe times so I need to create a for loop.
As 355 does not divide wholly into 25, I would like the last array to be smaller than the others.
Any help with this woud be greatly appreciated.
2 个评论
回答(2 个)
Matt J
2021-3-9
编辑:Matt J
2021-3-9
Using mat2tiles
it's as simple as,
A=mat2tiles(yourMatrix,[36,25])
9 个评论
Steven Lord
2021-3-10
From this additional information about what you're trying to do, splitting this matrix into cells in a cell array doesn't seem like the best option anymore. Pad your array with columns of missing data at the end until its width is a multiple of the width of the "blocks" you want to create, then reshape the data into a 3-dimensional array.
n = 7;
A = magic(n)
paddedA = [A, NaN(n, 1)]
B = reshape(paddedA, [n 4 2])
Now you can use the dim input argument to functions like sum and max to compute the sum or maximum in a specific dimension.
C = max(B, [], 3)
Matt J
2021-3-10
Would there be a way to calculate the max value for each point in the 36x25? For example, I would want the maximum value of the first point out of alll the reshaped matrices.
Yes, max, min, mean, median... Whatever you like:
max( reshape( yourMatrix(:,1:350), 36,25,[]) ,[],3 )
Jan
2021-3-9
X = rand(36, 355);
w = 25; % Width of the tiles
sX = size(X);
M = [repmat(w, 1, floor(sX(2) / w)), rem(sX(2), w)];
M = M(M ~= 0); % Crop last tile, if it is 0
C = mat2cell(X, sX(1), M)
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrices and Arrays 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!