Suppose I have a long data vector y, plus some indices into it. I want to extract a short snippet or window around every index.
For example, suppose I want to construct a matrix containing 64 samples before and 64 samples after every value that is below three. This is trivial to do in a for-loop:
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 However,this is not blazingly fast. Is there any way to vectorize (or otherwise speed up) this operation?
(In case this is unclear, the index could be anything and may not necessarily be a property of the data; I just wanted something simple to illustrate the idea.)
indexis a (column) vector. You don't need a for-loop, you can vectorize it, see Get vector indices before-and-after (window +/- 1) given indices