Это простой способ векторизации. При работе с массивами numpy хорошо то, что вы можете избежать циклов и использовать скорость numpy.
Вы можете заменить l oop следующим образом:
def ahamming(n,mid):
data = np.zeros(n)
wid1 = mid - 1
wid2 = n - mid
wid = max(wid1,wid2)
i = np.arange(n)
arg = (i+1) - mid
data = 0.54 + 0.46*np.cos((np.pi*arg)/wid)
return data
Немного более эффективно, но, возможно, менее интуитивно понятно:
i = np.arange(1, n+1)
arg = i - mid
Редактировать: Скоростные результаты уже получены. Ваше l oop -версия с n = 500 занимает 3,97 se c для 10000 вычислений. Версия инструмента numpy 0.10 se c, что в 40 раз быстрее.