根据提示,在右侧编辑器 Begin-End 区间补充代码,实现普通版本和向量化版本的一维随机游走模拟,计算模拟结果的粒子位置的平均值和标准差。 random_walk(N, T):基于Python内置random模块实现一维随机游走模拟,N为粒子数,T为模拟步数,返回模拟结果的粒子位置的平均值和标准差。 random_walk_vec(N, T):基于NumPy的random模块实现向量化的一维随机游走模拟,N为粒子数,T为模拟步数,返回模拟结果的粒子位置的平均值和标准差。
时间: 2024-02-05 16:12:32 浏览: 37
普通版本:
```python
import random
import math
def random_walk(N, T):
positions = [0.0] * N
for i in range(T):
for j in range(N):
positions[j] += random.uniform(-1, 1)
mean_position = sum(positions) / N
variance = sum((pos - mean_position) ** 2 for pos in positions) / N
std_dev = math.sqrt(variance)
return mean_position, std_dev
```
向量化版本:
```python
import numpy as np
def random_walk_vec(N, T):
positions = np.zeros(N)
for i in range(T):
positions += np.random.uniform(-1, 1, N)
mean_position = np.mean(positions)
std_dev = np.std(positions, ddof=1)
return mean_position, std_dev
```
解释:
普通版本使用Python内置的random模块生成-1和1之间的随机数,模拟一维随机游走。使用两个嵌套的for循环遍历每个粒子和每个步数,更新每个粒子的位置。最后,使用numpy计算平均位置和标准差。
向量化版本使用numpy的随机数生成器生成-1和1之间的随机数,生成一个形状为(N,T)的数组,其中N是粒子数,T是步数。然后,通过对第二个轴求和,得到每个粒子的位置。最后,使用numpy计算平均位置和标准差。