Matlab提供了两种机制来发出错误信号:error函数和语言的异常处理机制MException+ try/ catch/ throw.
看起来它们在很大程度上是等价的:error函数和MException函数具有非常相似的语法.通过a error()可以捕获引发catch的错误,而与错误相关的工具(如dbstop if error和lasterr)似乎也可以使用异常.
有没有理由更喜欢error('Foo:Bar', 'Some human-readable message about bar'),throw(MException('Foo:Bar', 'Some human-readable message'))反之亦然?
(它们都是内置函数,所以你不能只打开(例如)error.m来查看一个是否是另一个琐碎的包装器!)
假设我有一个长数据向量y,加上一些索引.我想在每个索引周围提取一个简短的片段或窗口.
例如,假设我想构建一个包含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
Run Code Online (Sandbox Code Playgroud)
然而,这并不是非常快.有没有办法对这个操作进行矢量化(或以其他方式加速)?
(如果不清楚,索引可能是任何东西,可能不一定是数据的属性;我只是想要一些简单的东西来说明这个想法.)