假设我有一个长数据向量 y,加上一些索引。我想在每个索引周围提取一个简短的片段或窗口。
例如,假设我想构建一个矩阵,其中每个小于 3 的值之前包含 64 个样本,之后包含 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
然而,这并不是很快。有什么方法可以矢量化(或以其他方式加速)此操作吗?
(如果不清楚,索引可以是任何东西,不一定是数据的属性;我只是想要一些简单的东西来说明这个想法。)
Use bsxfun http://www.mathworks.com/help/matlab/ref/bsxfun.html -
snippets = data(bsxfun(@plus,index(:),[-WIN_SIZE:WIN_SIZE]))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)