在Matlab中向量化数组索引/子集

马特·克劳斯(Matt Krause)

假设我有一个长数据向量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

但是,这并不是很快。有什么方法可以矢量化(或加快)此操作?

(如果不清楚,索引可以是任何东西,也不一定是数据的属性;我只想简单地说明一下这个想法。)

迪卡卡

使用bsxfun-

snippets = data(bsxfun(@plus,index(:),[-WIN_SIZE:WIN_SIZE]))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章