如何对此代码进行矢量化?

Sep*_*our 2 arrays performance matlab matrix vectorization

首先,我应该说我找不到适合我的问题的标题,所以我很感激任何编辑标题的人!
假设我有一个18432x1472矩阵,我想用这种形式将它转换为3072x1472矩阵(18432/6 = 3072):
元素的平均值(1,6),(2,6),...,(6 ,6)旧矩阵将转到新矩阵的元素(1,1)中旧矩阵的元素(7,6),(8,6),...,(12,6)的均值将转到新的元素(2,1),依此类推
到目前为止,我已经编写了这段代码:

function Out = MultiLooking( In )
   MatrixIn = double(In);
   m = size(In,1);
   InTranspose = MatrixIn';
   A = zeros(m,m/6);
   for i = 1:(m/6)
       A(6*(i-1)+1,i) = 1;
       A(6*(i-1)+2,i) = 1;
       A(6*(i-1)+3,i) = 1;
       A(6*(i-1)+4,i) = 1;
       A(6*(i-1)+5,i) = 1;
       A(6*(i-1)+6,i) = 1;
   end
   X = (InTranspose*A)/6;
   Out1 = X';
   Out = uint8(Out1);
end
Run Code Online (Sandbox Code Playgroud)

但它的速度很慢,对于我的极化SAR数据,计算机在运行此代码时会被暂停一段时间,所以我需要代码运行得更快!
任何人都可以建议我更快的代码来做这个目的???

Lui*_*ndo 5

Divakar的另一个很好的答案:使用blockproc(图像处理工具箱):

blockproc(MatrixIn, [6 size(MatrixIn,2)], @(x) mean(x.data))
Run Code Online (Sandbox Code Playgroud)

  • OP必须抛出许多替代品!让他们和我们在'SO`上生活有趣:) (3认同)