Jan*_*ins 19 ipython ipython-notebook
我写了一个ipython笔记本,分析数据集.现在我想使用此代码循环遍历不同的数据集.
代码分为大约50个单元格(包括注释,降价解释,......).有没有办法在循环中运行部分笔记本电脑或运行具有不同输入参数的整个笔记本?
我不想将所有单元格合并到一个函数中或者将代码下载为python脚本,因为我真的想通过仅执行某些单元格来运行(并试验)部分分析.
基本上它将脚本的重构部分转换为函数并在循环中调用函数,只是"脚本的部分"是笔记本单元格.
met*_*mit 23
我在这些场景中通常做的是将重要的单元格包装为函数(您不必合并它们中的任何一个)并且有一个特定的主单元格迭代参数列表并调用这些函数.例如,这就是我的一个笔记本中的"主单元格":
import itertools
# parameters
P_peak_all = [100, 200]
idle_ratio_all = [0., 0.3, 0.6]
# iterate through these parameters and call the notebook's logic
for P_peak, idle_ratio in itertools.product(P_peak_all, idle_ratio_all):
print(P_peak, idle_ratio, P_peak*idle_ratio)
print('========================')
m_synth, m_synth_ns = build_synth_measurement(P_peak, idle_ratio)
compare_measurements(m_synth, m_synth_ns, "Peak pauser", "No scheduler", file_note="-%d-%d" % (P_peak, int(idle_ratio*100)))
Run Code Online (Sandbox Code Playgroud)
您仍然可以在整个笔记本中拖动一些数据(即使用您的数据调用单元格底部的每个函数),以便能够为单个单元格测试实时内容.例如,某些单元格可能会声明:
def square(x):
y = x**2
return y
square(x) # where x is your data running from the prior cells
Run Code Online (Sandbox Code Playgroud)
这使您可以实时进行实验,并仍然可以从主单元格中调用通用功能.
我知道使用函数重构你的笔记本是一些额外的工作,但我发现它实际上增加了我的笔记本的可读性,这在你经过一段时间后回到它后很有用,如果你把它转换成"正确的"脚本或模块就更容易了.必要.
papermill.execute_notebook被设计(由 Netflix)让我们将笔记本作为一个函数来运行(这有助于代码重用、实验可重复性和内存效率——它以批处理模式运行笔记本,这与标准 python REPL 不同):
import papermill as pm
pm.execute_notebook(
'path/to/input.ipynb',
'path/to/output.ipynb',
parameters=dict(alpha=0.6, ratio=0.1)
)
Run Code Online (Sandbox Code Playgroud)
一个便宜但快速的技巧是在一种 while 循环中使用“运行所有单元格”:
Ipython/Jupyter - 我们可以编程“运行上面的所有单元格”吗?
更改参数
你的代码
把它放在最后一个单元格中:
显示(Javascript('IPython.notebook.execute_all_cells()'))
| 归档时间: |
|
| 查看次数: |
8761 次 |
| 最近记录: |