从一个时间序列数据中生成一个Markov Transition Field (MTF)

news2024/11/19 5:26:33

在这里插入图片描述
Markov Transition Field(马尔科夫转移场,简称MTF)是一个用来表示时间序列数据中不同时间点之间状态转移概率的可视化工具。简单来说,它展示了一个时间点上的状态如何可能转移到另一个时间点的状态,这些转移概率是通过统计数据得出的。通过这种方式,MTF能帮助我们直观地理解时间序列数据中状态的变化规律和趋势。

1. 代码

import numpy as np
import matplotlib.pyplot as plt
from scipy.ndimage import gaussian_filter

def discretize_signal(signal, n_bins):
    """离散化信号"""
    bins = np.linspace(np.min(signal), np.max(signal), n_bins)
    digitized = np.digitize(signal, bins) - 1  # 返回每个值所属的区间
    return digitized

def compute_transition_matrix(digitized_signal, n_states):
    """计算转移矩阵"""
    matrix = np.zeros((n_states, n_states))
    for (i, j) in zip(digitized_signal[:-1], digitized_signal[1:]):
        matrix[i, j] += 1

    # Normalize each row to sum to 1
    matrix = np.divide(matrix, np.maximum(np.sum(matrix, axis=1, keepdims=True), 1))
    return matrix

def create_markov_transition_field(matrix, digitized_signal):
    """根据转移矩阵和离散信号创建MTF"""
    signal_length = len(digitized_signal)
    mtf = np.zeros((signal_length, signal_length))
    for i in range(signal_length):
        for j in range(signal_length):
            mtf[i, j] = matrix[digitized_signal[i], digitized_signal[j]]
    return mtf

# 示例数据生成
np.random.seed(0)
time_series = np.random.rand(100) * 100  # 生成100个数据点

# 离散化和计算MTF
n_states = 10  # 状态数
digitized_signal = discretize_signal(time_series, n_states)
transition_matrix = compute_transition_matrix(digitized_signal, n_states)
mtf = create_markov_transition_field(transition_matrix, digitized_signal)

# 应用高斯模糊
mtf_blurred = gaussian_filter(mtf, sigma=1.0)

# 绘制结果
plt.figure(figsize=(12, 6))
plt.subplot(121)
plt.title('Original MTF')
plt.imshow(mtf, cmap='hot', origin='lower')
plt.colorbar()
plt.subplot(122)
plt.title('Blurred MTF')
plt.imshow(mtf_blurred, cmap='hot', origin='lower')
plt.colorbar()
plt.show()

结果:

代码解释

整体解释:

这段代码的主要目的是从一个时间序列数据中生成一个Markov Transition Field (MTF),并对其进行高斯模糊处理,最后可视化原始和模糊后的MTF。首先,通过discretize_signal函数将连续的时间序列数据离散化为有限的几个状态。然后,使用compute_transition_matrix函数计算这些离散状态之间的转移概率。接着,create_markov_transition_field函数利用这个转移矩阵和离散化的信号来创建一个MTF。最后,对MTF应用高斯模糊,并绘制出原始和模糊后的MTF图像。

逐行代码解释:

  1. 导入必要的库
import numpy as np
import matplotlib.pyplot as plt
from scipy.ndimage import gaussian_filter
  1. 定义discretize_signal函数
def discretize_signal(signal, n_bins):

定义了一个函数,用于将连续信号离散化为n_bins个区间。

bins = np.linspace(np.min(signal), np.max(signal), n_bins)

在信号的最小值和最大值之间均匀划分n_bins个区间。

digitized = np.digitize(signal, bins) - 1

使用numpy.digitize函数将信号中的每个值分配到对应的区间,并减1以调整索引从0开始。

  1. 定义compute_transition_matrix函数
def compute_transition_matrix(digitized_signal, n_states):

定义一个函数,用于根据离散化的信号计算状态转移矩阵。

matrix = np.zeros((n_states, n_states))

初始化一个n_states x n_states的零矩阵。

for (i, j) in zip(digitized_signal[:-1], digitized_signal[1:]):
    matrix[i, j] += 1

遍历离散化信号,统计状态之间的转移次数。

matrix = np.divide(matrix, np.maximum(np.sum(matrix, axis=1, keepdims=True), 1))

将转移矩阵的每一行归一化,使其和为1。

  1. 定义create_markov_transition_field函数
def create_markov_transition_field(matrix, digitized_signal):

定义一个函数,根据转移矩阵和离散信号创建MTF。

signal_length = len(digitized_signal)
mtf = np.zeros((signal_length, signal_length))

初始化一个signal_length x signal_length的零矩阵。

for i in range(signal_length):
    for j in range(signal_length):
        mtf[i, j] = matrix[digitized_signal[i], digitized_signal[j]]

填充MTF矩阵,其中的元素表示从信号中的某个状态转移到另一个状态的概率。

  1. 示例数据生成与处理
np.random.seed(0)
time_series = np.random.rand(100) * 100

生成一个包含100个数据点的随机时间序列。

n_states = 10
digitized_signal = discretize_signal(time_series, n_states)
transition_matrix = compute_transition_matrix(digitized_signal, n_states)
mtf = create_markov_transition_field(transition_matrix, digitized_signal)

对时间序列进行离散化,计算转移矩阵,并创建MTF。

  1. 应用高斯模糊并绘制结果
mtf_blurred = gaussian_filter(mtf, sigma=1.0)

对MTF应用高斯模糊。

接下来的代码使用matplotlib库绘制原始和模糊后的MTF图像。

这段代码展示了如何从时间序列数据中提取Markov Transition Field (MTF),并通过高斯模糊对其进行平滑处理,最后可视化这两个MTF图像。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1699593.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言指针相关知识(第五篇章)(非常详细版)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、sizeof和strlen对比二、数组之间的比较(依据strlen和sizeof来呈现)(一)、一维整型数组(二&#…

着急联系媒体投稿发表文章有什么好方法?

作为一名曾经的信息宣传员,我深知在紧张的宣传节点上,急于将精心撰写的文章推向更广阔的读者群体,那种紧迫感和焦虑几乎成了常态。记得那段时间,为了能让稿件得到及时有效的曝光,我不得不亲自踏上了一场寻找媒体联系方式的“马拉松”。那时,我手头的资源有限,仅有的几个联系方式…

学 Java 具体能干什么?

学习 Java 后,你可以从事许多不同的工作和项目,涵盖了广泛的应用领域。以下是一些具体的应用场景和工作方向: 1. 企业级应用开发 Java 是企业级应用开发的首选语言之一,特别适合开发大规模、分布式、多层次的企业应用程序。 Jav…

创建列表的艺术:三种实用方法全解析

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、基础篇:直接使用中括号创建列表 1. 创建空列表 2. 创建包含元素的列表 二…

【经典文献】光-声立体成像:关于系统标定与三维目标重建

论文名称:《Opti-Acoustic Stereo Imaging: On System Calibration and 3-D Target Reconstruction》作者列表:Shahriar Negahdaripour, Hicham Sekkati, and Hamed Pirsiavash作者单位:美国迈阿密大学电气与计算机工程系,佛罗里达…

sourcetree推送到git上面

官网:Sourcetree | Free Git GUI for Mac and Windows 下载到1次提交 下载后打开 点击跳过 下一步 名字邮箱 点击clone 把自己要上传的代码粘贴到里面去 返回点击远程->点击暂存所有 加载完毕后,输入提交内容提交 提交完成了 2次提交 把文件夹内的…

iOS 17.5 release notes

文章目录 iOS 17.5 更新恢复了多年前删除的一些图片新增彩虹壁纸欧盟用户可直接从网站下载应用新增了追踪通知改进 Apple News图书应用"阅读目标"设计更新颜色匹配的播客小部件Web浏览器安全权限的访问下一代“Beats Pill”扬声器在iOS 17.5代码中得到确认店内Vision…

面试被问到不懂的东西,是直接说不懂还是坚持狡辩一下?

大家好,我是瑶琴呀。 面试被问到不懂的东西,是直接说不懂还是坚持狡辩一下?这个问题可以转变一下,如果你顺利拿到 offer,公司安排的工作跟你之前的技术和经验不匹配,你还愿意干下去吗? 转变一…

基于Vue+SpirngBoot的博客管理平台的设计与实现(论文+源码)_kaic

摘 要 随着当下社会的发展,互联网已经成为时代的主流,从此进入了互联网时代,对大部分人来说,互联网在日常生活中的应用是越来越频繁,大家都在互联网当中互相交流、学习、娱乐。博客正是扮演这样一个角色。博客已成为当…

Docker 安装kingbase V8r6

下载 官网下载,注意:这里下载 Docker 版本v8r6 安装 # 导入镜像 docker load -i kingbase.tar# 重命名 docker tag [image-name]:[tag] [new-image-name]:[new-tag]# 删除 docker rmi [image-name]:[tag]# 创建容器 docker run -tid \ --privileged \…

计算机毕业设计 | SpringBoot招投标 任务发布网站(附源码)

1,绪论 在市场范围内,任务发布网站很受欢迎,有很多开发者以及其他领域的牛人,更倾向于选择工作时间、工作场景更自由的零工市场寻求零散单子来补贴家用。 如今市场上,任务发布网站鱼龙混杂,用户需要找一个…

使用大模型结合Mermaid实现业务流程图快速生成

一、需求描述 在日常系统研发过程中,经常面临前期要写投标技术文档,中期要写系统概要设计、详细设计等各类文档,最耗时间的便是画一些业务流程图。随着大模型的不断普及,大模型对文字的处理越来越强,现可以找一个能简化…

pycharm连接阿里云服务器过程记录

因为不想用自己的电脑安装anaconda环境,所以去查了一下怎么用服务器跑代码,试着用pycharm连接阿里云服务器,参考了很多博客,自己简单配置了一下,记录一下目前完成的流程. 主要是:阿里云服务器的远程登录和安装anaconda,以及怎么用pycharm连接阿里云服务器上的解释器. 小白刚开始…

Python 渗透测试:电子邮件 || Redis || FTP || SSH || MySQL 集成爆破工具.

集成爆破工具. 集合爆破里面包含了:电子邮件爆破工具,Redis爆破工具,FTP爆破工具,SSH爆破工具,MySQL爆破工具。 目录: 集合爆破工具. 电子邮件 爆破工具: Redis 爆破工具: FTP …

元组推导式

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 使用元组推导式可以快速生成一个元组,它的表现形式和列表推导式类似,只是将列表推导式中的“[]”修改为“()”。例如&#xf…

Quartus Cyclone I II III IVE 器件型号

玩耍了一个 EP2 型号的开发板,发现 安装的quartus13 没有Cyclone II 型号,经过探索发现了是版本不对。 https://www.intel.com/content/www/us/en/software-kit/711920/intel-quartus-ii-subscription-edition-design-software-version-13-0sp1-for-win…

java欢迪迈手机商城设计与实现源码(springboot+vue+mysql)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的欢迪迈手机商城设计与实现。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 欢迪迈手机商城…

【JVM】内存区域划分 | 类加载的过程 | 双亲委派机制 | 垃圾回收机制

文章目录 JVM一、内存区域划分1.方法区(1.7之前)/ 元数据区(1.8开始)2.堆3.栈4.程序计数器常见面试题: 二、类加载的过程1.类加载的基本流程1.加载2.验证3.准备4.解析5.初始化 2.双亲委派模型类加载器找.class文件的过…

智能无网远控再升级 向日葵Q2Pro升级版发布

无网或者内网设备也想要进行远程控制,是不是听上去有些天方夜谭了?其实这类特种设备的远程控制需求是非常强的,比如医疗/工控设备的远程运维、使用指导教学等等。 实际上,只要这类设备有屏幕,支持可视化的桌面操作&am…

JVM学习-Class文件结构①

字节码文件的跨平台性 Java语言:跨平台的语言(Write Once,Run Anywhere) 当Java源代码编译成字节码后,如果想在不同平台上运行,则无须再次编译这上优势不再那么吸引人,Python,PHP,Ruby,Lisp等有强大的解释器跨平台似乎已经成为一…