Matlab 手动上采样/复制矩阵
我试图通过复制另一个矩阵,将一个矩阵的样本增加两倍,但我对代码感到困惑,基本上我想要的是:Matlab 手动上采样/复制矩阵,matlab,loops,matrix,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,
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
但它说索引超过了矩阵维数,我理解这是因为+1,但我不确定如何才能做到这一点…我最终使用的解决方案是:
[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
数据:
使用(R2015a中介绍的)的解决方案:
使用索引的解决方案
Up = Y(ceil(1/n:1/n:end), ceil(1/n:1/n:end));
使用Kronecker产品的解决方案:
Up = kron(Y, ones(n))
这行吗
repmat(sort(repmat([1,2],1,2)),2,1)
您这样做是作为编程练习,还是只需要调整矩阵的大小?因为您可以使用kron
或imresize
在一行中完成此操作。这个问题很重要:实际上,删除“排序”可以解决问题,谢谢@一个月一个月的尝试kron(Y,one(2))
。应该在水平和垂直方向上复制每个元素两次。
Up = Y(ceil(1/n:1/n:end), ceil(1/n:1/n:end));
Up = kron(Y, ones(n))