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数据,计算机在运行此代码时会被暂停一段时间,所以我需要代码运行得更快!
任何人都可以建议我更快的代码来做这个目的???
Divakar的另一个很好的答案:使用blockproc(图像处理工具箱):
blockproc(MatrixIn, [6 size(MatrixIn,2)], @(x) mean(x.data))
Run Code Online (Sandbox Code Playgroud)