【问题标题】:Shrink matrix to certain size将矩阵缩小到一定大小
【发布时间】:2013-12-20 22:33:03
【问题描述】:

我对 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

我想将它们调整为 2 个大小相同的矩阵(例如,每个 4 行)而不丢失平均值,因此如果我们有一个 8 行矩阵,则必须删除每隔一行而不是第一行或最后 4 行。

谁能帮帮我?

【问题讨论】:

标签: matlab matrix resize average reshape


【解决方案1】:

无需使用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

【讨论】:

    【解决方案2】:

    要删除每隔一行,您可以使用:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-29
      • 2016-08-02
      • 2013-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-28
      相关资源
      最近更新 更多