Splitting arrays using loops
1 次查看(过去 30 天)
显示 更早的评论
would there be a way to create a loop for splitting an 8x8 array into seperate 4x4 arrays and then find the mean of each of the 4x4 arrays and place each of the mean values into a new array ?
5 个评论
Stephen23
2023-8-11
"No need for permute, squeeze does the job just fine"
Not really, because SQUEEZE is fragile, unlike PERMUTE. It all looks "fine" ... until one day the user has data which consists of one row of blocks and are then astonished when the output has the wrong orientation:
A = reshape(1:32,4,8)
M = squeeze(mean(reshape(A,[4 1 4 2]),[1 3])) % oops, wrong output
M = mean(permute(reshape(A,4,1,4,2),[2,4,1,3]),3:4) % aaah, much better
M = permute(mean(reshape(A,4,1,4,2),[1,3]),[2,4,1,3]) % also this
SQUEEZE is just like LENGTH: used only by people who like hidden bugs in their code.
Bruno Luong
2023-8-11
编辑:Bruno Luong
2023-8-11
OP stated clearly he wants average on 8 x 8 matrix not 4 x 8.
But granted if one doesn't like squeeze, in this block average problem use reshape rather than permute for efficienty
A = reshape(1:32,4,8)
M = reshape(mean(reshape(A,[4 1 4 2]),[1 3]), [1 2])
采纳的回答
C B
2023-8-10
I have already answered you same apart from making mean value as new array. here is how you can do it.
A = reshape(1:64, [8,8]);
mean_values = zeros(2,2);
% Loop to extract 4x4 matrices and compute mean
for row = 1:2
for col = 1:2
r_idx = (row-1)*4 + 1 : row*4;
c_idx = (col-1)*4 + 1 : col*4;
submatrix = A(r_idx, c_idx);
mean_values(row, col) = mean(submatrix(:));
end
end
disp(mean_values);
0 个评论
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Loops and Conditional Statements 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!