将矩阵收缩到一定的大小

时间:2013-12-20 22:33:03

标签: matlab matrix resize average reshape

我对MatLab很新。我正在处理由传感器制作的巨大矩阵,所以我将使用较小的矩阵作为我的问题的例子。

假设我有这两个矩阵

矩阵1

  1 1 1 1 1 1 0 0 6 0 0 0
  0 1 1 1 1 0 0 0 0 4 0 0
  1 1 1 1 1 1 0 0 3 3 0 0
  0 2 2 6 0 1 3 1 2 1 1 3
  0 0 2 6 0 1 2 1 2 1 1 2
  0 2 4 0 1 0 0 2 2 1 2 0

矩阵2

  0 2 1 4 0 0 0 1 1 3 2 0
  0 2 1 2 5 0 1 2 3 3 1 0
  0 1 2 3 0 0 0 1 2 2 0 0
  2 2 2 2 0 1 0 3 2 2 2 0
  2 2 2 4 0 2 3 1 2 2 2 2
  2 2 2 4 0 2 0 3 2 2 3 2
  3 2 1 5 0 1 0 1 3 3 4 1
  0 3 1 6 0 1 1 2 3 2 2 1
  0 2 1 4 0 1 1 2 3 2 0 0

我想将它们调整为两个大小相同的矩阵(比如说每行4行)而不会丢失平均值,所以如果我们有一个8行矩阵,则必须删除所有其他行而不是第一行或最后4行。

任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

无需使用imresize(这是图像处理工具箱的一部分)。您可以通过使用尺寸并使用mean

来平均每个n
result = squeeze(mean(reshape(permute(matrix,[1 3 2]),n,[],size(matrix,2))))

例如:

matrix = [ 1     1     1     1     1     1     0     0
           0     1     1     1     1     0     0     0
           1     1     1     1     1     1     0     0
           0     2     2     6     0     1     3     1
           0     0     2     6     0     1     2     1
           0     2     4     0     1     0     0     2 ];
n = 2;

result =

    0.5000    1.0000    1.0000    1.0000    1.0000    0.5000         0         0
    0.5000    1.5000    1.5000    3.5000    0.5000    1.0000    1.5000    0.5000
         0    1.0000    3.0000    3.0000    0.5000    0.5000    1.0000    1.5000

答案 1 :(得分:1)

要删除所有其他行,您可以使用:

M(1:2:end,:)=[]

这并不能保持所有情况下的平均值,已经提到的imresize可能是一个选项。