2017-09-14 14 views
3

重塑MATLAB矩陣,這樣我基本上可以做到這一點在我上一個MATLAB代碼工作的一種特殊的方式

enter image description here

要accomlish的是,我的代碼看起來像這樣

A = [1:30]'; % Example matrix 
rows = 3; 

for i=1:(numel(A)-rows+1) 
    B(1:rows,i)=A(i:i+rows-1,1); 
end 

燦有人幫助我以更簡單的方式做同樣的事情?我猜測有一條單線命令可以解決這個問題(也許我錯了)。

+0

你有圖像處理工具箱? –

+0

嗨路易斯,我做但我必須說我不希望使用任何工具箱。 – bru1987

回答

2

Arows被定義爲在你的代碼中。我假設A中的值僅僅是一個例子。如果他們總是1,2,...,下面的一些解決方案可以簡化。

A = [1:30].'; 
rows = 3; 

這裏有一些方法:

  • 我的選擇:

    B = A(bsxfun(@plus, (1:rows).', 0:numel(A)-rows)); 
    
  • 一種替代方案:

    B = conv2(A.', flip(eye(rows))); 
    B = B(:, rows:end-rows+1); 
    
  • 略多於低效:

    B = hankel(A); 
    B = B(1:rows, 1:numel(A)-rows+1); 
    
  • 如果您有圖像處理工具箱:

    B = im2col(A, [rows 1], 'sliding'); 
    
+0

「滑動」是否與滑動窗口有關?如果是這樣,那真的可以幫助我與我的代碼的其他部分。 – bru1987

+1

@ bru1987 [是](https://es.mathworks.com/help/images/ref/im2col.html),它是 –

+0

令人驚歎。謝謝。 – bru1987

相關問題