这是关于matlab的。 假设我有一个像这样的矩阵
A = [1,2,3,4,5;6,7,8,9,10;11,12,13,14,15]
现在,我想知道如何在A
中获得小矩阵的平均值。
就像位于左上角[1,2;6,7]
我唯一想到的方法就是切掉我想从中获得价值的部分
X = A(1:2,:);
XY = X(:,1:2);
并按列的平均值Mcol = mean(XY);
表示值。
最后通过逐行表示Mcol
来获得该部分的均值。
Mrow = mean(Mcol,2);
我认为这不是明智的选择,因此,如果有人帮助我使其变得更聪明,更快捷,那将是很棒的事情。
答案 0 :(得分:2)
您的程序正确。 一些小改进是:
XY
:XY = A(1:2, 1:2)
mean
的调用替换为在 linearized 子矩阵mean(XY(:))
上的单个调用。XY
。在这种情况下,您可以使用reshape
进行线性化,如下所示:mean(reshape(A(1:2, 1:2), 1, []))
。如果要对所有重叠的子矩阵执行此操作,则可以使用“图像处理工具箱”中的im2col
:
submatrix_size = [2 2];
A_sub = im2col(A, submatrix_size);
给予
A_sub =
1 6 2 7 3 8 4 9
6 11 7 12 8 13 9 14
2 7 3 8 4 9 5 10
7 12 8 13 9 14 10 15
也就是说,每一列都是线性化的子矩阵之一。因此,现在您只需要mean(A_sub, 1)
即可获取所有子矩阵的均值。