matlab - 通过插入相邻元素平均值来扩展 2*2 矩阵

标签 matlab matrix average expand

我想编写一个转换矩阵的函数x=[a b; cd] 到另一个矩阵:

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

最佳答案

您可以使用 2D 卷积来计算相邻元素的总和(每个元素的分子),然后使用 2D 卷积与 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

关于matlab - 通过插入相邻元素平均值来扩展 2*2 矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39907211/

相关文章:

c++ - 正确使用c++中的Matlab "engine.h"

matlab - 如何在不先将函数返回的 MATLAB 数组分配给局部变量的情况下对其进行索引?

python - 如何在 Python 中使用 numpy 将 3D 矩阵和 2D 矩阵相乘?

c++ - 如何创建一个 boost 矩阵数组?

jquery - 返回所有 JSON 值的平均值

matlab - 循环邻域操作 : matlab color histogram

matlab - 如何在 julia 中删除一行矩阵

R:有条件删除矩阵中的行和列

python - 如何对包含空列表的列表进行垂直平均?

xml - XSLT 包含函数