【发布时间】:2017-02-02 22:47:56
【问题描述】:
我正在尝试用高斯噪声解决一些随机微分方程。我想知道使用 Noise Vector 是否更好:
eta = np.random.normal(size=N)*sqrtdt
q = []
p = []
q.append(1.0)
p.append(1.0)
for i in range(N):
q.append(f(q[i],p[i],eta[i])
p.append(g(q[i],p[i],eta[i])
使用 f 和 g 表现良好的函数,或者我是否应该在每次迭代中创建 随机数:
q = []
p = []
q.append(1.0)
p.append(1.0)
for i in range(N):
eta = np.random.normal()*sqrtdt
q.append(f(q[i],p[i],eta)
p.append(g(q[i],p[i],eta)
此代码应放入另一个 for 循环并针对 N 的多个值运行,该值从 10^4 到 10^9 不等。我也愿意接受另一种写法,我知道 for 循环并不是最接近 Python 思维方式。
【问题讨论】:
-
是什么让您说 for 循环不是最接近 Python 思维方式? For 循环完全符合 Python 风格。
-
如果你使用python2,你应该使用
xrange而不是range(range(N)会创建一个N数字列表...) -
嗯,使用 numpy 最好避免 for 循环
-
我会选择第一个,想法是在循环中做最少的工作。不过,我可能会改变您添加新元素的方式 - 可能会查看已初始化的数组。
-
如果问题可以描述为数值积分,那么有专用的 numpy、scipy 函数可能比运行自己的反向差分循环更好、更快
标签: python python-2.7 numpy for-loop random