我想编写一个算法,将大小为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个相等的部分,直到没有什么可以拆分?
答案 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]
矩阵。