手动上采样/复制矩阵

时间:2016-11-10 00:44:12

标签: matlab loops matrix

我试图通过复制另一个矩阵来对矩阵进行二次采样,但我对代码感到困惑,基本上我想要的是:

Y = [1,2]

然后上采样版本看起来像:

Up = [1,1,2,2;1,1,2,2]

到目前为止我写的是:

[row,col] = size(y)

Up = zeros(row*2,col*2);

for i = 1:2:row*2

     for j = 1:2:col*2

        Up(i, j) = Y(i,j);
        Up(i+1, j) = Y(i,j);
        Up(i, j+1) = Y(i,j);
        Up(i+1, j+1) = Y(i,j);

    end
end

但是它说Index超过了矩阵维度,我理解这是因为+ 1s但是我不确定如何做到这一点...

2 个答案:

答案 0 :(得分:1)

数据:

Y = [1,2]; % matrix
n = 2; % repetition factor

使用repelem function(在R2015a中引入)的解决方案:

Up = repelem(Y,n,n);

使用索引;

的解决方案
Up = Y(ceil(1/n:1/n:end), ceil(1/n:1/n:end));

使用 Kronecker产品的解决方案

Up = kron(Y, ones(n))

答案 1 :(得分:0)

我最终使用的解决方案是:

[row,col] = size(Y);
Up = zeros(row*2,col*2);
idx_row = 1;

for i = 1:D:row
    idx_col = 1;
    for j = 1:D:col

        Up(i:i+1, j:j+1) = repmat(repmat(Y(idx_row,idx_col),1,2),2,1);
       idx_col = idx_col + 1;
    end
     idx_row = idx_row + 1;
end