首页 > 解决方案 > Matlab上矩阵中矩阵的平均值

问题描述

这是关于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);

我认为这不是一个聪明的方法,所以如果有人帮助我让它变得更聪明、更快,那就太好了。

标签: arraysmatlabmatrixmean

解决方案


你的程序是正确的。一些小的改进是:

  • XY一步即可使用索引:XY = A(1:2, 1:2)
  • 将两个调用替换为线性化子矩阵mean上的一个调用: .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)得到所有子矩阵的均值。


推荐阅读