当前位置: 首页 > news >正文

Jupyter notebook调试:设置断点运行

写了一段小代码,主要是用来测试一段序列的k均值聚类效果;

中间想到debug一下,但是想到自己似乎从来没有正式地接触过jupyter notebook中地debug,平时也只是多开几个cell,然后在其他cell中复制粘贴部分代码,一步一步运行,然后进行print()大法查看变量和数据结构。

import numpy as np
from sklearn.cluster import KMeans
window_size = 3
features = [] #每一个窗口的012显状态的频率
obs_labels = [] #每一个窗口中心位置的显状态标签n_states=3 # 隐状态数
n_observations=3 # 显状态数seq = "MEGDAVEAIVEESETFIKGKERKTYQRRREGGQEEDACHLPQNQTDGGEVVQDVNSSVQMVMMEQLDPTLLQMKTEVMEGTVAPEAEAAVDDTQIITLQVVNMEEQPINIGELQLVQVPVPVTVPVATTSVEELQGAYENEVSKEGLAESEPMICHTLPLPEGFQVVKVGANGEVETLEQGELPPQEDPSWQKDPDYQPPAKKTKKTKKSKLRYTEEGKDVDVSVYDFEEEQQEGLLSEVNAEKVVGNMKPPKPTKIKKKGVKKTFQCELCSYTCPRRSNLDRHMKSHTDERPHKCHLCGRAFRTVTLLRNHLNTHTGTRPHKCPDCDMAFVTSGELVRHRRYKHTHEKPFKCSMCDYASVEVSKLKRHIRSHTGERPFQCSLCSYASRDTYKLKRHMRTHSGEKPYECYICHARFTQSGTMKMHILQKHTENVAKFHCPHCDTVIARKSDLGVHLRKQHSYIEQGKKCRYCDAVFHERYALIQHQKSHKNEKRFKCDQCDYACRQERHMIMHKRTHTGEKPYACSHCDKTFRQKQLLDMHFKRYHDPNFVPAAFVCSKCGKTFTRRNTMARHADNCAGPDGVEGENGGETKKSKRGRKRKMRSKKEDSSDSENAEPDLDDNEDEEEPAVEIEPEPEPQPVTPAPPPAKKRRGRPPGRTNQPKQNQPTAIIQVEDQNTGAIENIIVEVKKEPDAEPAEGEEEEAQPAATDAPNGDLTPEMILSMMDR"
seq_encoded = [ [0 if i in ["K","R","H"] else (1 if i in ["D","E"] else 2) ] for i in seq ]
for i in range(len(seq_encoded) - window_size + 1):window = seq_encoded[i:i+window_size]feature = np.zeros(n_observations)for obs in window:feature[obs[0]] += 1 # 计算0、1、2显状态频数feature /= window_size  # 归一化features.append(feature)obs_labels.append(seq_encoded[i+window_size//2]) # 记录中心位置的显状态标签features,obs_labels = np.array(features),np.array(obs_labels)# 使用K-means聚类
kmeans = KMeans(n_clusters=n_observations,random_state=2025)
cluster_labels = kmeans.fit_predict(features) #fit+predict# 统计每个簇对应的观测分布
emission_counts = np.ones((n_states,n_observations)) # 拉普拉斯平滑for cluster_id in range(n_states):cluster_mask = (cluster_labels == cluster_id) # 获取当前簇的掩码,如果是当前簇的样本则为Truecluster_obs = obs_labels[cluster_mask] #取出对应cluster id的观测标签for obs in cluster_obs:emission_counts[cluster_id,obs] += 1 # 对于每一个cluster_id是隐状态,obs是显状态,进行计数
# 归一化
emission_counts /= emission_counts.sum(axis=1, keepdims=True) # 按行归一化
# 输出每个簇的观测分布
for i in range(n_states):print(f"Cluster {i} emission distribution: {emission_counts[i]}")

就拿最基本的断点操作来举例,比如说我只想运行代码到第22行,然后简单查看一下features,obs_labels的变量值。

如果是以前刚入门的我,可能就是直接另外开一个cell,然后把这前面22行代码直接复制粘贴,然后单独运行,运行之后再一步一步print,太low了。

一,现在来介绍一个调试的库pdb:

jupyter的调试是通过python自带的pdb库来实现的。

首先是你的每个cell的code前面,加两句

import pdb
pdb.set_trace() # 调试用,断点调试

然后我们手头上的代码直接运行:

ctrl+enter

运行之后可以看到弹出的调试命令行框:

一些最基本的调试命令参数:

完整命令简写命令描述
argsa打印当前函数的参数
breakb设置断点
clearcl清除断点
condition设置条件断点
continuec或者cont继续运行,知道遇到断点或者脚本结束
disable禁用断点
enable启用断点
helph查看pdb帮助
ignore忽略断点
jumpj跳转到指定行数运行
listl列出脚本清单
nextn执行下条语句,遇到函数不进入其内部
pp打印变量值,也可以用print
quitq退出 pdb
returnr一直运行到函数返回
tbreak设置临时断点,断点只中断一次
steps执行下一条语句,遇到函数进入其内部
wherew查看所在的位置
!在pdb中执行语句

比如说我想在这里的第26行设置一个断点:

我们输入:

b 26

在输入b 26之后:对比前面

比如说我现在想看一下features变量的值,我直接在输入框中输入features,或者print(features),同样我可以看一下shape:

查看另外一个变量:

看shape,是一维array:

如果输出调试信息太多了,可以clear cell的output;

调试完毕之后可以直接q退出。

二,jupyter本身也开发了相应的可视化debug工具

debugger

参考:https://zhuanlan.zhihu.com/p/120215615

参考:https://blog.csdn.net/weixin_41529093/article/details/117535034

http://www.lryc.cn/news/573328.html

相关文章:

  • Redis后端的简单了解与使用(项目搭建前置)
  • DeepEP开源MoE模型分布式通信库
  • 洛谷P3953 [NOIP 2017 提高组] 逛公园
  • 【DCS开源项目】—— Lua 如何调用 DLL、DLL 与 DCS World 的交互
  • day44-硬件学习之arm启动代码
  • 【Datawhale组队学习202506】零基础学爬虫 02 数据解析与提取
  • 【simulink】IEEE5节点系统潮流仿真模型(2机5节点全功能基础模型)
  • 【智能体】dify部署本地步骤
  • LeetCode第279题_完全平方数
  • 湖北理元理律师事务所企业债务纾困路径:司法重整中的再生之道
  • 蓝桥杯备赛篇(上) - 参加蓝桥杯所需要的基础能力 1(C++)
  • 华为OD机试_2025 B卷_判断一组不等式是否满足约束并输出最大差(Python,100分)(附详细解题思路)
  • 车载电子电器架构 --- 电子电气架构设计方案
  • QC -io 服务器排查报错方式/报错: Failed to convert string to integer of varId variable!“
  • 2.7 Python方法调用机制解析:从描述符到字节码执行
  • 学习C++、QT---03(C++的输入输出、C++的基本数据类型介绍)
  • 【无标题】使用 Chocolatey 安装 WSL 管理工具 LxRunOffline
  • 贪心算法思路详解
  • Mac电脑-Markdown编辑器-Typora
  • 利用nRF54L15-DK的DEBUG OUT接口调试用户设计的ARM处理器系统
  • springboot口腔管理平台
  • 【分布式理论】读确认数与写确认数:分布式一致性的核心概念
  • WPF Style样式 全局样式资源字典
  • 获取 DOM 与 nextTick:Vue 中的 DOM 操作
  • CTF--PhP Web解题(走入CTF)
  • 增量学习ASAP的源码剖析:如何实现人形的运动追踪和全身控制(核心涉及HumanoidVerse中的agents模块)
  • Redis集群部署终极指南:架构选型、生产部署与深度优化
  • 人形机器人_双足行走动力学:本田机械腿的倒立摆模型
  • rt-thread中使用usb官方自带的驱动问题记录
  • 【全开源】填表问卷统计预约打卡表单系统+uniapp前端