Как векторизовать цикл for? - PullRequest
       54

Как векторизовать цикл for?

0 голосов
/ 25 октября 2018

Мне нужно векторизовать этот код, который я использую для анализа больших объемов аудиоданных.Для нормализации данных я использовал цикл for, но хотел бы векторизовать его, чтобы повысить производительность.

for i in range(len(state)):

    if state[i] == 0:
        savedAudio[i] = 0
    else:
        savedAudio[i] = savedAudio[i] / env[i] 

State, saveAudio и env - это просто большие одномерные массивы, заполненные показаниями с деки.Я новичок в концепции векторизации и в настоящее время не очень понимаю ее.

1 Ответ

0 голосов
/ 25 октября 2018

С помощью модуля numpy вы можете сделать что-то вроде этого

import numpy as np

# sample inputs
state = [0,1,1]
savedAudio = [3,3,3]
env = [1,2,4]

# convert your lists to numpy arrays
savedAudio = np.array(savedAudio, dtype = 'float64')
state = np.array(state)
env = np.array(env)

# vectorized replacement
savedAudio[state != 0] = savedAudio[state != 0] / env[state != 0]
savedAudio[state == 0] = 0

print(savedAudio)
>>> [0.   1.5  0.75]
...