我有一个矩阵(大小为A和B;假设为100x100)并且想要填充大小为a和b的较小矩阵(或块)(假设为12x12)。但是,当我使用以下循环时,矩阵的边缘无法填充并且将为空。一种解决方案是使用大矩阵(例如120x120)并填充较小的块,然后最终将最终矩阵裁剪为100x100。但是,我不想使用这个解决方案。相反,我想支持边缘矩阵并使用相同的axb块。换句话说,当我到达边缘时,我想以该方向上的块大小返回并填充剩余的部分。
我完全很困惑,我应该如何在matlab代码中包含这个想法。任何想法?
M = zeros(100,100);
for i = 1:12:100-12+1
for j = 1:12:100-12+1
block = rand(12,12);
M(i:i+11, j:j+11) = block;
end;
end;
figure, imagesc(M); axis equal tight xy
答案 0 :(得分:1)
在Matlab中最好not to use i
and j
as variable names。我正在更改为ii
和jj
。
您应该做的是:选择指数i
和j
,如下所示:
for ii = [1:12:100-12, 100-12+1]
或一般
for ii = [1:step_size_x:matrix_size_x-step_size_x, matrix_size_x-step_size_x+1]
,同样适用于jj
:
for jj = [1:step_size_y:matrix_size_y-step_size_y, matrix_size_y-step_size_y+1]
这可以通过单独处理特殊索引并在最后附加它来实现。
答案 1 :(得分:0)
我认为以下工作:让C = A div a
,D = B div b
(其中div用于整数除法)。然后,使用repmat
(比循环快得多),将block
的CxD平铺分配为M的左下部分。然后,创建(再次,可能使用repmat
,例如, repmat(block,C+1,1)
),创建C + 1 x 1和1 x D + 1块瓷砖,适当地裁剪它们(使它们适合A,B)并将它们分配为顶部的“一排块”和最右边的“ M的块的一列(它将覆盖一些以前分配的值,我相信,这就是你想要的)。