首页 > 编程问答 >如何使用Python计算位移自相关函数?

如何使用Python计算位移自相关函数?

时间:2024-07-22 09:34:34浏览次数:15  
标签:python velocity autocorrelation

我正在使用 python 来分析粒子的异常扩散。我已经得到了粒子轨迹的位移,我想计算并绘制位移自相关与滞后时间 t 的关系。

我认为可能存在使用 t 和位移(如 delta r)的自相关函数的一般函数,但我不能没找到。我可以得到函数或代码吗?


可以使用 numpy 和 matplotlib 库在 Python 中计算和绘制位移自相关函数。以下是如何执行此操作的示例:

import numpy as np
import matplotlib.pyplot as plt

def displacement_autocorrelation(trajectory, lag_times):
  """
  计算轨迹的位移自相关函数。

  参数
  ----------
  trajectory : numpy array
    粒子位置的一维 numpy 数组。
  lag_times : numpy array
    要计算自相关的一系列滞后时间。

  返回值
  -------
  numpy array
    给定滞后时间的位移自相关函数。
  """

  # 计算位移
  displacements = trajectory[lag_times:] - trajectory[:-lag_times]

  # 计算每个滞后时间的自相关
  autocorrelation = np.array([np.mean(displacements[:len(displacements)-t] * displacements[t:]) for t in lag_times])

  return autocorrelation


# 生成示例轨迹数据
N = 1000
time = np.arange(N)
trajectory = np.cumsum(np.random.randn(N)) # 示例轨迹,此处为随机游走

# 定义滞后时间
lag_times = np.arange(1, N//10) # 计算最多 N/10 个滞后时间的自相关

# 计算位移自相关函数
autocorrelation = displacement_autocorrelation(trajectory, lag_times)

# 绘制结果
plt.plot(lag_times, autocorrelation)
plt.xlabel('滞后时间')
plt.ylabel('位移自相关')
plt.title('位移自相关函数')
plt.show()

在此代码中:

  1. displacement_autocorrelation 函数获取轨迹(粒子位置的一维数组)和滞后时间数组作为输入。
  2. 它计算输入轨迹的位移。
  3. 然后,它循环遍历每个滞后时间并计算相应时间间隔的位移自相关。
  4. 每个滞后时间的自相关值都存储在一个数组中并返回。

主脚本部分生成一个示例轨迹(在本例中为随机游走),定义滞后时间数组,调用 displacement_autocorrelation 函数,并绘制结果。

此代码计算给定滞后时间的位移自相关。可以根据的需要调整滞后时间数组。还可以使用此代码探索具有不同类型的运动(例如扩散)的轨迹的行为。

标签:python,velocity,autocorrelation
From: 78776671

相关文章

  • 一天一点点,第四天Python基础
    第一天:一天一点点。Python基础-CSDN博客第二天:一天一点点,接上章Python基础-CSDN博客第三天:一天一点点,第三天Python基础(循环语句)-CSDN博客推导式推导式是一种独特的数据处理方式,可以从一个数据序列构建另一个新的数据序列的结构体。推导式是一种强大且简洁的语法,适用于生......
  • Python - for循环不使用正则表达式附加数组
    以下代码从URL获取版本号,然后对于每个版本号,转到该版本号的页面并使用文件名的特定模式填充数组。生成的数组应包含每个版本号的文件名列表,但它似乎只包含早期版本(2.6)。使用print语句,我可以看到代码的工作原理是它获取sha256sums.asc文件-所有这些文件,所有版本。我猜......
  • 使用 callable_iterator (re.finditer) 导致 Python 冻结
    我有一个为文本的每一行调用的函数。deftokenize_line(line:str,cmd=''):matches=re.finditer(Patterns.SUPPORTED_TOKENS,line)tokens_found,not_found,start_idx=[],[],0print(matches)formatchinmatches:pass#Rest......
  • Python 的 time.sleep - 永远不会醒来
    我认为这将是那些简单的问题之一,但它让我感到困惑。[停止媒体:我是对的。找到了解决方案。查看答案。]我正在使用Python的单元测试框架来测试多线程应用程序。很好而且很直接-我有5个左右的工作线程监视一个公共队列,以及一个为它们制作工作项的生产者线程......
  • python中使用mitmproxy的http模块出错
    我有一个使用mitmproxyhttp函数的代码,它在这里惨败:defmain(stdscr):try:parser=argparse.ArgumentParser(description='NetSourNetworkAnalyzer')parser.add_argument('--proxy',action='store_true',help='EnableH......
  • 使用python图像去噪没有获得所需的重建图像
    我是python机器学习的初学者,我正在编写一个程序,使图像变得嘈杂,然后我的程序输出重建的图像。我正在使用加性高斯白噪声并使用前馈神经网络。我的程序显示真实图像、噪声图像和重建图像。这些是我通常得到的结果。有人知道如何解决这样的问题吗?这是我的代码:ap......
  • 使用 pip 22.3.1 和 python 3.11.0 安装 MetaTrader5 错误
    我正在尝试使用pip在Windows上安装MetaTrader5。python--versionPython3.11.0pip--versionpip22.3.1pipinstallMetaTrader5ERROR:CouldnotfindaversionthatsatisfiestherequirementMetaTrader5(fromversions:none)ERROR:Nomatchingdistribu......
  • 在 Python 中溶解线条
    我有一个包含多行的形状文件。我正在寻找一种方法来消除所有的接触线。这在ArcMap中是可能的,但似乎在Python和QGIS中都无法做到:之前:所需的输出:这需要在多行上完成,因此像QGIS合并一样手动执行不是一个选项。在ArcMap中,我曾经使用“溶解”......
  • 一个简单的问题(python、串行通信和arduinos)
    只是一个关于小脚本的快速问题,由于某种原因无法工作我运行了这个脚本:importserialimporttimeimportturtledefserialreading():serialPort=serial.Serial(port="COM5",baudrate=9600,bytesize=8,timeout=2,stopbits=serial.STOPBITS_ONE......
  • 我在 Windows 10 上运行 Python 代码后控制台立​​即关闭
    虽然我在代码末尾使用input(),但在Windows10(IDLE之外)的窗口中输入名称后,控制台仍然立即关闭,并且我看不到结果。我该怎么做才能阻止控制台关闭?#!python3name=input('Enteryourname:')print('Hello'+name)input('pressEntertoexit:')你在代码末尾......