使用 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 video 的 Andrew Ng 遍历 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 video 的 Andrew Ng 遍历 numpy 广播 属性.