使用 numpy 将标量添加到 for 循环内部和外部的向量之间有区别吗?

Is there a difference between adding a scalar to a vector inside a for loop and outside it, using numpy?

我试图利用 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

的预期相同

为什么会这样?广播在循环内是否遵循不同的规则?

在您的第二个选项中,您需要执行以下操作:

B=B+k

如您所见,您不需要 for 循环,它比在 "vector”(numpy 数组)。

它是某种形式的"Vectorization"计算而不是迭代计算,在复杂性和可读性方面更好。两者都会产生相同的结果。

你可以看到很多关于向量化与迭代的例子,包括运行时间,here.

你可以看到 great videoAndrew Ng 遍历 numpy 广播 属性.