Это умножение скользящего вектора, которое вы описываете, является примером того, что известно как свертка .Следующее приводит к тому же результату, что и цикл в вашем примере:
vout = [nan(windowSize-1,1);
conv(mat,flip(multMat),'valid')];
Если ваш вывод на самом деле не нуждается в ведущих значениях NaN
, которые не перезаписываются в вашем цикле, тогда выражение conv
достаточно, не конкатенируя к нему элементы NaN
.
Для достаточно больших векторов это, конечно, не гарантирует, что это будет так быстро, как хотелось бы, но встроенная в свертку реализация MATLAB, скорее всего,быть достаточно близким к оптимальному инструменту для работы.