簡體   English   中英

Octave function 獲取矩陣中的連續列組

[英]Octave function to get groups of consecutive columns in matrix

我試圖找到一種有效的方法來提取矩陣中的n個連續列組。 例子:

A = [0, 1, 2, 3, 4; 0, 1, 2, 3, 4; 0, 1, 2, 3, 4]; 
n = 3;

應該產生一個與此類似的 output:

answer = cat(3, ...
                [0, 1, 2; 0, 1, 2; 0, 1, 2], ...
                [1, 2, 3; 1, 2, 3; 1, 2, 3], ...
                [2, 3, 4; 2, 3, 4; 2, 3, 4]);

我知道這可以使用for循環來實現,例如以下代碼片段:

answer = zeros([3, 3, 3]);
for i=1:3
  answer(:, :, i) = A(:, i:i+2);
endfor

但是,我試圖避免在這種情況下使用for循環 - 是否也有可能將此操作向量化(使用索引表達式)?

僅使用索引

ind = reshape(1:size(A,1)*n, [], n) + reshape((0:size(A,2)-n)*size(A,1), 1, 1, []); 
result = A(ind);

索引ind是使用線性索引隱式擴展構建的。

使用圖像 Package / 圖像處理工具箱

result = reshape(im2col(A, [size(A,1) n], 'sliding'), size(A,1), n, []);

這里的大部分工作是由帶有'sliding'選項的im2col function 完成的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM