上篇聊了Python脚本自动化。今天说一个做算法研究和实验记录的神器——Jupyter Notebook。
先说个场景。
你正在调一个路径规划算法,需要不断调整参数、看结果、再调整。如果用传统的Python脚本,每次改个参数都要重新跑整个脚本,等半天才能看到结果。
用Jupyter Notebook就不一样了。你可以把代码分成一个个cell,改一个参数只跑那一个cell,几秒钟就能看到效果。而且代码、输出、图表、文字说明都在一个文件里,天然适合做实验记录。
Jupyter的基础操作
Jupyter的核心概念是cell。每个cell是一段独立的代码或文本。你可以单独运行一个cell,也可以从头到尾依次运行所有cell。
几个最常用的快捷键:Shift+Enter运行当前cell并跳到下一个,Esc+A在上方插入cell,Esc+B在下方插入cell,Esc+M把cell转成Markdown,Esc+Y转回代码。
掌握这几个快捷键,操作效率会提升很多。不用每次都去点菜单。
在机器人算法调试中的应用
Jupyter特别适合调试需要频繁看结果的算法。比如调一个SLAM算法,你需要不断修改参数、跑数据、看地图效果。
一个典型的工作流:
# Cell 1: 导入依赖
import numpy as np
import matplotlib.pyplot as plt
from slam_algorithm import SLAM
# Cell 2: 加载数据
data = load_sensor_data('test_sequence_01.bag')
print(f"数据量: {len(data)} 帧")
# Cell 3: 初始化算法
slam = SLAM(
map_resolution=0.05,
max_range=10.0,
loop_closure=True
)
# Cell 4: 运行并可视化
for frame in data[:100]: # 先跑前100帧看效果
slam.update(frame)
plt.figure(figsize=(10, 8))
slam.plot_map()
plt.title('SLAM Map (first 100 frames)')
plt.show()
调参数的时候,只需要改Cell 3里的参数,然后重新跑Cell 3和Cell 4。不用重新加载数据,不用重新初始化——省下来的时间很可观。
实验记录:让每次实验都可追溯
Jupyter的另一个强大之处是能把代码、参数、结果、分析都记在一个文件里。这在科研和工程中都很有价值。
一个实验Notebook的典型结构:
# 实验:不同分辨率对SLAM建图质量的影响
## 实验目的
测试map_resolution参数对建图精度和运行时间的影响。
## 实验参数
– 数据集:test_sequence_01
– 分辨率:0.01, 0.05, 0.1, 0.2
– 其他参数保持不变
然后是代码cell跑实验、收集数据、画图。最后是分析:
## 结果分析
从图中可以看出:
– 分辨率0.01时地图最精细,但运行时间增加了3倍
– 分辨率0.05是性价比最高的选择
– 分辨率0.2时细节丢失严重,拐角处出现明显偏差
## 结论
选择0.05作为默认分辨率,兼顾精度和效率。
这种Notebook发给同事或导师,别人能完整复现你的实验。几个月后你自己回头看,也能立刻想起来当时做了什么、为什么这么做。
几个实用技巧
魔法命令:Jupyter有一些内置的魔法命令很好用。%timeit可以精确测量代码执行时间,%matplotlib inline让图表直接显示在Notebook里,%%writefile把一个cell的内容写成文件。
%timeit slam.update(frame) # 自动跑多次取平均
# 输出:12.3 ms ± 0.5 ms per loop
%load_ext autoreload配合%autoreload 2可以在你修改了外部模块后自动重新加载,不用重启kernel。调试自己写的Python模块时特别有用。
交互式控件:用ipywidgets可以创建滑块、下拉菜单等交互控件,方便调参:
from ipywidgets import interact
def test_slam(resolution=0.05, max_range=10.0):
slam = SLAM(map_resolution=resolution, max_range=max_range)
# 运行并显示结果…
interact(test_slam, resolution=(0.01, 0.2, 0.01), max_range=(5.0, 30.0, 1.0))
这样你拖个滑块就能实时看到不同参数下的效果,比手动改数字方便太多。
版本控制:Notebook是JSON格式的,可以直接用Git管理。但diff看起来不太友好。建议安装nbdime工具,它能为Notebook提供语义化的diff显示。
常见的坑
Jupyter有几个容易踩的坑值得注意。
第一个是执行顺序问题。你可以随意跳着运行cell,这虽然灵活,但容易导致状态混乱。比如你先跑了Cell 1、3、5,然后修改了Cell 2再跑一次,这时候变量状态可能和你想象的不一样。建议调试完之后,用"Restart & Run All"从头到尾跑一遍,确认没有问题。
第二个是内存泄漏。如果你在循环里不断创建大对象(比如往list里append大量数据),内存会一直涨。Jupyter不会自动回收。可以用%reset清空所有变量,或者显式del不用的大对象。
第三个是路径问题。Notebook的工作目录是它所在的文件夹,但如果你从别的地方启动Jupyter,路径可能不对。建议在项目根目录启动jupyter notebook,用相对路径引用数据文件。
JupyterLab和远程开发
如果你还没试过JupyterLab,强烈建议升级一下。它是Jupyter Notebook的下一代界面,支持多标签页、文件浏览器、终端集成,体验接近一个轻量级IDE。在机器人开发中,我们经常需要在远程服务器(比如连着激光雷达的工控机)上跑实验。用SSH端口转发加上JupyterLab,就可以在本地浏览器里操作远程的Notebook:
# 在远程机器上启动JupyterLab
ssh user@robot-pc "jupyter lab –no-browser –port=8888"
# 本地端口转发
ssh -L 8888:localhost:8888 user@robot-pc
# 本地浏览器打开 http://localhost:8888
这样你就能用远程服务器的GPU和传感器资源,同时享受本地浏览器的流畅体验。
面试中怎么聊
面试官问算法调试,想看的不是你会不会用Jupyter,而是你有没有系统化的调试方法。
一个好的回答:先说你用什么工具(Jupyter),然后说你的工作流——怎么分cell组织代码、怎么管理实验参数、怎么记录结果。最后说你怎么从实验中得出结论、指导优化。
如果你还能提到你把Notebook导出成报告分享给团队,或者用Notebook做代码review——那就是加分项了。
Jupyter在算法验证中的价值
在实际项目中,Jupyter Notebook特别适合做算法原型验证。比如开发一个路径规划算法时,可以先在Notebook里用简单的地图环境测试,逐步调参,看到可视化结果后再把代码迁移到正式的C++工程里。很多团队现在也要求新人先用Notebook熟悉算法逻辑,再写生产代码。面试时提到这个工作流,面试官会觉得你的工程习惯很好。
给正在准备面试的你
如果你还没用过Jupyter,建议花一个小时装一个,跑通一个完整的实验流程。不用很复杂,就是一个数据处理加可视化的Notebook。用过之后你会发现它确实比传统脚本方便。
面试的时候,能说出"我用Jupyter做算法调试,把实验参数、代码、结果都记在一个Notebook里,方便复现和分享"——这种回答比"我用print调试"专业得多。
下篇聊Python面试高频题——机器人岗位常考的Python知识点汇总。
如果这篇文章对你有帮助,欢迎点赞、在看、转发三连。 你的支持是我持续更新的最大动力。
「机器人软件开发面试·从入门到精通」连载系列 上一篇:第78篇 Python脚本自动化——批量处理、数据清洗的实用技巧 下一篇预告:第80篇 Python面试高频题——机器人岗位常考的Python知识点
有任何问题欢迎评论区留言,我会尽量回复。




