Python 均方位移

Python 均方位移,python,random-walk,Python,Random Walk,我正在研究一个微米大小的粒子在低密度等离子体中的运动。我用所谓的长距离显微镜记录了粒子的运动(2726张图像,fps=60赫兹) 以毫米为单位的x、y数据可在以下位置获得: 使用mathematica,我得到了以下均方位移(MSD)的对数图: 我是Python新手,我搜索了一些示例,了解如何从文件中读取二维坐标,计算并显示MSD(平均值和标准偏差)。 我已经看到,有一些答案显示了如何计算MSD,但我无法使它们适应我的数据 如果有人能向我展示解决我的问题所必需的完整Python源代码(包括所有导

我正在研究一个微米大小的粒子在低密度等离子体中的运动。我用所谓的长距离显微镜记录了粒子的运动(2726张图像,fps=60赫兹)

以毫米为单位的x、y数据可在以下位置获得:

使用mathematica,我得到了以下均方位移(MSD)的对数图:

我是Python新手,我搜索了一些示例,了解如何从文件中读取二维坐标,计算并显示MSD(平均值和标准偏差)。

我已经看到,有一些答案显示了如何计算MSD,但我无法使它们适应我的数据

如果有人能向我展示解决我的问题所必需的完整Python源代码(包括所有导入),我将不胜感激

对于我来说,这将是一个很好的机会,也是一个非常具体的问题,可以开始使用Python编程。事先非常感谢您的帮助

我从一个答案()中尝试了以下内容,但代码产生了错误

import numpy as np
import matplotlib.pyplot as plt

data= [[49.136926889715, 48.4423791821561],
[48.8104534783146, 51.0491783022365],
[48.5231487166892, 53.3485202014],
[48.2320069851565, 55.2569539728078],
[47.8817794028032, 56.993296770262],
[47.381875792142, 58.179721166033],
...
[45.3409434914228, 49.0259838546922]]

def compute_MSD(path):
   totalsize=len(path)
   msd=[]
   for i in range(totalsize-1):
       j=i+1
       msd.append(np.sum((path[0:-j]-path[j::])**2)/float(totalsize-j))

   msd=np.array(msd)
   return msd

result=compute_MSD(data)

plt.plot(result)
plt.show()

Numpy有一个标准函数来计算标准偏差。您可以使用
numpy.std
函数。将列表作为输入,它将输出结果。你不需要写那些循环就可以了

要获得与MATLAB相同的结果,请在
numpy.std
函数的参数中设置
ddof=1


请参阅示例。

Numpy有一个标准函数来计算标准偏差。您可以使用
numpy.std
函数。将列表作为输入,它将输出结果。你不需要写那些循环就可以了

要获得与MATLAB相同的结果,请在
numpy.std
函数的参数中设置
ddof=1


请参阅示例。

我的图表看起来与您的图表略有不同,这可能是因为对您正在计算的确切内容存在误解,但我相信这解决了基本问题

plasma = [[0.09296720430107527, 0.09280376344086022],
[0.09230113636363636, 0.09769886363636364],
[0.09130555555555556, 0.10198777777777777],
...

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.DataFrame(plasma, columns=['x', 'y'])
df['time'] = np.arange(0,len(df)) / 60.0
df['dist'] = np.sqrt(df['x']**2 + df['y']**2)
df['MSD'] = pd.rolling_mean((np.abs(df['dist'])**2), len(df), min_periods=1)
以上是我对你所说的MSD的解释。我使用的是与原点的距离,即
sqrt(x^2+y^2)
,然后应用以下公式

然后,您可以使用以下方法创建绘图

plt.loglog(df['time'], df['MSD'], 'o')
plt.xlabel('t (sec)')
plt.ylabel('MSD')
plt.show()


如果您想修改/完善图表,那么教程部分是了解matplotlib的一个很好的地方。

我的图表看起来与您的图表略有不同,这可能是因为您对所计算的内容有误解,但我相信这解决了基本问题

plasma = [[0.09296720430107527, 0.09280376344086022],
[0.09230113636363636, 0.09769886363636364],
[0.09130555555555556, 0.10198777777777777],
...

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.DataFrame(plasma, columns=['x', 'y'])
df['time'] = np.arange(0,len(df)) / 60.0
df['dist'] = np.sqrt(df['x']**2 + df['y']**2)
df['MSD'] = pd.rolling_mean((np.abs(df['dist'])**2), len(df), min_periods=1)
以上是我对你所说的MSD的解释。我使用的是与原点的距离,即
sqrt(x^2+y^2)
,然后应用以下公式

然后,您可以使用以下方法创建绘图

plt.loglog(df['time'], df['MSD'], 'o')
plt.xlabel('t (sec)')
plt.ylabel('MSD')
plt.show()


如果要修改/细化图形,教程部分是获取matplotlib控制柄的绝佳位置,.

您是否已将数据读入python列表?您是否已将数据读入python列表?我的问题主要是关于均方位移…我的问题主要是关于均方位移…非常感谢。。。我必须检查为什么y值不同,曲线变化看起来也不同。。。也可能是我犯了一个错误。。。但这也有助于梅也不清楚你上面的情节中代表了什么颜色非常感谢你。。。我必须检查为什么y值不同,曲线变化看起来也不同。。。也可能是我犯了一个错误。。。但梅艳芳也不清楚你上面的情节是什么颜色