【问题标题】:Expand 2*2 matrix by inserting neighbor elements average通过插入相邻元素平均扩展 2*2 矩阵
【发布时间】:2016-10-06 23:35:35
【问题描述】:

我想写一个转换矩阵的函数x=[a b; c d] 进入另一个矩阵:

y = [  a        (a+b)/2       b   ; 
     (a+c)/2  (a+b+c+d)/4   (b+d)/2 ; 
       c        (c+d)/2       d    ]

【问题讨论】:

  • 你的意思是用双线性插值调整大小?
  • 你的意思是写 (a+b)/2(a+c)/2 等等,对吧? 括号很重要
  • 好的,感谢编辑。

标签: matlab matrix average expand


【解决方案1】:

您可以使用二维卷积计算相邻元素的总和(每个元素的分子),然后使用二维卷积和 1 的矩阵来确定分母(相邻元素的数量)。

x = [1, 2; 3, 4];

numerator = conv2(x, ones(2));

%    1    3    2
%    4   10    6
%    3    7    4

denominator = conv2(ones(size(x)), ones(2));

%   1   2   1
%   2   4   2
%   1   2   1

result = numerator ./ denominator;

%   1.0000   1.5000   2.0000
%   2.0000   2.5000   3.0000
%   3.0000   3.5000   4.0000

或者作为单行:

result = conv2(x, ones(2)) ./ conv2(ones(size(x)), ones(2));

这也与bi-linear interpolation 相同,因此您还可以执行以下操作:

[xx,yy] = meshgrid(1:0.5:size(x, 2), 1:0.5:size(x, 1));
result = interp2(x, xx, yy, 'linear');

这两种方法都有额外的好处,适用于任何大小的x

【讨论】:

    【解决方案2】:

    您可以使用mean函数如下:

    y = [x(:,1)  mean(x,2)   x(:,2)];
    y = [y(1,:); mean(y,1);  y(2,:)];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-27
      • 1970-01-01
      • 2014-07-19
      • 2016-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多