【问题标题】:Manually upsample/replicate matrix手动上采样/复制矩阵
【发布时间】:2016-11-10 00:44:11
【问题描述】:

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

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,但我不知道该怎么做...

【问题讨论】:

  • 这行得通吗? repmat(sort(repmat([1,2], 1, 2)), 2, 1)
  • 您是在做这个编程练习,还是只需要调整矩阵的大小?因为您可以在一行中使用kronimresize...
  • 这个问题是相关的:stackoverflow.com/questions/16266804/…
  • 其实没关系,删除“排序”可以解决问题,谢谢!
  • @AprilCrumb 试试kron(Y, ones(2))。这应该将每个元素水平和垂直复制两次。

标签: matlab loops matrix


【解决方案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));

使用克罗内克产品的解决方案:

Up = kron(Y, ones(n))

【讨论】:

    【解决方案2】:

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

    [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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-25
      • 1970-01-01
      • 2015-03-23
      相关资源
      最近更新 更多