我想编写一个转换矩阵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 ]
答案 0 :(得分:4)
您可以使用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
。
答案 1 :(得分:2)
您可以使用mean
功能,如下所示:
y = [x(:,1) mean(x,2) x(:,2)];
y = [y(1,:); mean(y,1); y(2,:)];