Matlab将矩阵分成相等的部分,直到没有什么可以拆分

时间:2015-12-05 10:34:24

标签: matlab matrix split

我想编写一个算法,将大小为128x128的矩阵分成4个相等的块,直到没有其他东西要分割,并打印出每个矩阵中1个计数的总和。

总计数可以简单地用函数nnz(m)计算,其中m是矩阵。

可以使用这些函数

完成矩阵128x128的拆分
a = m(1:end/2, 1:end/2);
b = m(1:end/2, end/2+1:end);
c = m(end/2+1:end, 1:end/2);
d = m(end/2+1:end, end/2+1:end);

a,b,c,d是128x128矩阵的相等4部分。

但是我如何编写一个逻辑来循环分裂,以便它也将这4个矩阵分成4个相等的部分,直到没有什么可以拆分?

1 个答案:

答案 0 :(得分:1)

你正在解决这个问题有点复杂。可以使用以下方法代替您的算法: “迭代地累积2x2的块,直到所有内容都累积到2x2矩阵”

x{1}=randi([0,1],8,8)
while size(x{end},1)>2
    x{end+1}=squeeze(sum(sum(reshape(x{end},2,size(x{end},1)/2,2,size(x{end},2)/2),1),3));
end

解释循环中的行。 reshape创建一个3d矩阵,例如(1,:,1,:)索引第一个块。现在有了数据结构,sum用于计算总和。最后,我们得到一个[n,1,n,1]矩阵,squeez矩阵为[n,n]矩阵。