2016-11-10 77 views
1

我想用兩個通過複製另一個矩陣上採樣矩陣,但我很困惑的代碼,基本上就是我想要的,如果:手動上採樣/複製矩陣

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秒,但我不知道怎麼回事,到去這樣做......

+0

工作的呢? 'repmat(sort(repmat([1,2],1,2)),2,1)' – Alex

+0

你是在做這個編程練習,還是隻需要調整矩陣大小?因爲你可以用'kron'或'imresize'做一行...... – beaker

+1

這個問題是相關的:http://stackoverflow.com/questions/16266804/matlab-repeat-every-column-sequentially-n-times – Alex

回答

1

數據:

Up = repelem(Y,n,n); 

搜索解決方案:在使用repelem function(在R2015a引入)

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

解n使用索引;使用克羅內克產品

Up = Y(ceil(1/n:1/n:end), ceil(1/n:1/n:end)); 

解決方案:

Up = kron(Y, ones(n)) 
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