2016-05-26 2 views
2

Как венерить следующий код? Я уже смотрел на вещание, но я не в состоянии выяснить способ векторизации следующий код:Как векторизовать для циклов, как указано ниже в numpy?

for k in range(m): 
    b[k] = b[k,:] + c[k] 

где b является (2,3,4) массив размера и c является (1,2) и m - некоторое фиксированное целое число?

ответ

3

С вашего кода кажется c является массив 1D. Теперь, чтобы добавить элементы c вдоль первой оси b, вам нужно сделать c a 3D массив, добавив два размера синглтона (или новые оси в терминологии NumPy) в axes=(1,2) с None/np.newaxis, а затем выполните необходимое количество. Это приведет к векторизации NumPy broadcasting в игру. Таким образом, реализация будет -

b += c[:,None,None] 

Если c действительно (1,2) формы массив, то решение было бы -

b += c.T[:,None]