这是对社区的一个呼吁,看看是否有人有想法提高这个MSD计算实施的速度.它主要基于此博客文章的实现:http://damcb.com/mean-square-disp.html
目前,对于500个点的2D轨迹,当前实施需要大约9秒.如果你需要计算很多轨迹,这真的太过分了......
我没有尝试并行化(使用multiprocess或者joblib),但我觉得创建新进程对于这种算法来说太重了.
这是代码:
import os
import matplotlib
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
# Parameters
N = 5000
max_time = 100
dt = max_time / N
# Generate 2D brownian motion
t = np.linspace(0, max_time, N)
xy = np.cumsum(np.random.choice([-1, 0, 1], size=(N, 2)), axis=0)
traj = pd.DataFrame({'t': t, 'x': xy[:,0], 'y': xy[:,1]})
print(traj.head())
# Draw motion
ax = traj.plot(x='x', y='y', alpha=0.6, legend=False)
# Set limits
ax.set_xlim(traj['x'].min(), …Run Code Online (Sandbox Code Playgroud)