Есть ли разница между добавлением скаляра к вектору внутри цикла for и вне его с помощью функции numpy? - PullRequest
0 голосов
/ 26 августа 2018

Я пытался использовать свойство Broadcasting в Python при замене цикла for этого фрагмента:

import numpy as np
B = np.random.randn(10,1)
k = 25
for i in range(len(B)):
  B[i][0]= B[i][0] + k

на следующее:

for i in range((lenB)):
  B=B+k

Я заметил, что былполучать разные результаты.Когда я пробовал вне цикла, B = B + k, дал те же результаты, что я ожидал с B [i] [0] = B [i] [0] + k

Почему это так?Вещание придерживается различных правил внутри циклов?

1 Ответ

0 голосов
/ 26 августа 2018

В вашем втором варианте вы можете сделать следующее:

B=B+k

Как видите, вам не нужен цикл for, и он НАМНОГО быстрее, чем цикл " vector " (numpy array).

Это некоторая форма вычисления "векторизации" вместо итеративного вычисления, которая лучше с точки зрения сложности и удобочитаемости. Оба приведут к одному и тому же результату.

Вы можете увидеть множество примеров векторизации и итерации, включая время выполнения, здесь .

И вы можете увидеть отличное видео из Эндрю Нг , переходящее на беспорядочное вещание свойство.

...