假設我有一個長數據向量y,加上一些索引。我想提取每個索引周圍的短片段或窗口。在Matlab中向量化數組索引/子集
例如,假設我想構造一個包含64個樣本的矩陣,並且在每個小於3的值後構建64個樣本。在for循環中這是微不足道的:
WIN_SIZE = 64;
% Sample data with padding
data = [nan(WIN_SIZE,1); randn(1e6,1); nan(WIN_SIZE,1)];
% Sample events, could be anything
index = find(data < 3);
snippets = nan(length(index), 2*WIN_SIZE + 1);
for ii=1:length(index)
snippets(ii,:) = data((index(ii)-WIN_SIZE):(index(ii)+WIN_SIZE));
end
但是,這並不是很快。有什麼方法可以矢量化(或以其他方式加速)此操作?
(如果這還不清楚,該指數可以是任何東西,不一定是數據的屬性;我只是想簡單的東西來說明這個想法。)
'index'是一個(列)向量。你不需要一個for循環,你可以對它進行矢量化,參見[在給定索引前後獲取矢量索引(窗口+/- 1)](https://stackoverflow.com/questions/48881754/get- vector-indices-before-and-after-window-1-given-indices) – smci
請注意,這個問題已經有2年的歷史了,而且在2016年以前的任何東西都不起作用。 –
馬特,好的,那麼我們應該如何處理這個過時的問題和答案?我建議我們關閉 - 重複進入[獲取向量索引之前和之後(窗口+/- 1)給定的指數](https://stackoverflow.com/questions/48881754/get-vector-indices-before-and -after-window-1-given-indices) – smci