Jupyter Notebooks应用非常简单并且对于任何面向python的工作都能够十分不便的应用。只有它的内核处于活动状态,就能够用数据子集运行和测试脚本,而不必每次重启程序,这样能够放慢咱们开发和测试的速度。
然而因为它太简略了,所以咱们常常会犯一些谬误,节约咱们的工夫和计算成本。在这篇文章中,咱们将探讨一些能够节省时间,升高计算成本的技巧。
1、魔法命令
在Jupyter notebook中,“魔法命令”是非凡的命令,不是Python语言的一部分,但能够使您的生存更轻松。这些命令后面有%符号。
魔法命令很有用,能够间接嵌入到python代码中,并解决常见问题,例如列出当前目录中的所有文件或更改当前工作目录。
上面是一些常见的魔术命令:
- %run:在以后内核中运行Python脚本。
- %load:从脚本中加载代码并在以后内核中运行。
- %who:列出所有变量。
- %timeit:记录一行代码的执行工夫。
- %debug:在异样处输出调试器。
- %matplotlib inline:在notebook中显示图形。
- %load_ext:加载扩大,例如IPython扩大。
- %pwd:打印当前工作目录。
- %ls:显示当前目录中的所有文件。
咱们能够运行%lsmagic来查看所有magic命令的列表。
要取得无关特定魔术命令的更多信息,能够应用?操作符,例如%run?。
2、执行另一个Jupyter notebook文件
能够应用魔术命令来做一些乏味的事件。例如,从py文件中执行python代码,或从ipynb文件中执行jupyter notebook。
%run将执行jupyter notebook并显示输入,这与导入python模块不同。
咱们能够运行two-histogram notebook并失去如下输入:
%run ./two-histograms.ipynb
3、查看文档
通过高亮显示办法并按Shift + Tab键,能够轻松查看该办法的文档。它将显示编写函数时编写的文档字符串。你也能够通过点击右上角的+按钮来关上模态框。
还能够通过突出显示每个magic命令并按Shift + Tab键来取得无关每个magic命令的更多信息。
4、增加多个游标
如果你须要重命名写在几个中央的变量,或者在编辑代码时,你心愿你有多个光标。
在Jupyter notebooks中,能够应用多个光标同时编辑文本。如果你想一次对多行文本进行雷同的更改,这可能很有用。
要在Jupyter notebook中应用多个游标,能够按住Alt键并单击所需的地位。这将在每个点击的地位创立一个游标。而后你能够像平常一样进行编辑,更改将同时利用于所有地位。
Windows:按住alt +左键并拖动光标。Mac:按住option键+左键拖动光标。
你也能够应用Shift + Alt +上/下箭头键组合来抉择多行文本,并在每一行的结尾创立一个光标。
记住,应用多个游标可能会产生问题,所以最好在应用这个性能之前保留好你的代码,以防你做了任何意想不到的更改。
5、从另一个内部python脚本中插入代码
能够用内部python脚本替换单元格的内容。你能够应用计算机上的任何python文件,也能够应用URL作为源。
# Before Running %load ./hello_world.py
在下一个单元格中能够应用:
if __name__ == "__main__": print("Hello World!") Output Hello World!
6、运行CMD/Shell命令⌨
Jupyter notebook中应用!命令前的前缀能够运行操作系统的命令。例如,要列出当前目录下的文件,能够应用ls命令:
!ls
你也能够通过在命令前面增加参数来传递参数。例如,要列出特定目录下的文件,能够应用-l选项以长格局显示文件,并将目录门路指定为参数:
!ls -l /path/to/directory
你也能够将命令的输赋值给一个变量,并在代码中应用它。例如:
files = !ls print(files)
下面代码会把当前目录中的文件列表调配给files变量,并打印进去。
你能够应用这种技术在Jupyter notebook中运行任何shell命令,只有该命令在运行notebook的零碎中可用。
7、为程序实现设置闹钟⏰
当你的模型实现训练或任何工作时,失去一个告诉总是很有帮忙的。
在windows 10中,咱们能够应用win10toast模块设置它。
pip install win10toast
而后应用这段代码
from win10toast import ToastNotifier toaster = ToastNotifier() #Your program toaster.show_toast("Execution complete", "Your calculation completed", duration=10)
咱们在程序实现执行时为咱们进行提醒。
import winsound # set an alarm of 440HZ for one second (1000ms) duration = 1000 freq = 440 winsound.Beep(freq, duration)
Mac和Linux能够应用os模块,应用afplay命令(在macOS上)或aplay命令(在Linux上)播放声音。
import os # Run your program here # Play a sound when the program completes os.system("afplay /path/to/sound.mp3") # macOS os.system("aplay /path/to/sound.wav") # Linux
能够将/path/to/sound.mp3替换为要播放的声音文件的门路。或者是afplay或aplay命令反对的任何音频文件,如MP3、WAV或AIFF。
只有在运行Jupyter notebook的零碎上有afplay或aplay命令时,此办法才无效。
在Mac中,还能够应用内置命令say,在程序实现时说一些话。
import os os.system('say "hi siri"')
8、显示执行工夫⏱️
要在Jupyter notebook中测量单元格的执行工夫,能够应用%timeit魔法命令。此命令将执行单个语句并返执行工夫。上面是如何应用%timeit的例子:
%timeit sum(range(100))
这将计算sum函数的执行工夫,并返回执行该函数所需的均匀工夫。
还能够应用%%timeit来测量整个单元格的执行工夫:
%%timeit total = 0 for i in range(1000): total += i
能够看到下面的代码与咱们应用应用Python中的time模块的后果相似
import time start_time = time.time() # code to measure sum(range(100)) end_time = time.time() elapsed_time = end_time - start_time print(f'Execution time: {elapsed_time:.2f} seconds')
留神:这些办法只会测量单元格中代码的执行工夫。如果计算单元依赖于其余计算单元或内部资源,则执行工夫将不包含执行这些依赖项所需的工夫。
9、在notebook之间传递变量
在Jupyter notebook中,%store魔法命令能够在notebook之间传递变量。
上面是一个应用它的例子:
var1 = 10 %store var1
在另外一个notebook中能够用上面命令取得变量的值
%store -r var1 print(var1)
%store魔法命令有以下几个操作
%store var1:存储变量var1
%store -r var1:检索存储的变量var1,并将其赋值给以后笔记本中同名的变量
%store -d var1:删除已存储的变量var1
%store -z:删除所有已存储的变量
你也能够应用一个%store命令存储多个值,如
%store var1 var2
%store命令仅在雷同的Jupyter会话中无效。
%store命令的值在内核重启后也是能够拜访的,看看上面这个例子。
10、列出所有键盘快捷键⌨
学习键盘快捷键将节俭你大量的工夫。咱们能够在顶部菜单下:帮忙>键盘快捷键查看它们,或在命令模式下按H键来查看。以下是Jupyter notebook中一些罕用的键盘快捷键列表:
- Enter:以后单元格进入编辑模式
- Esc:以后单元格进入命令模式
- Shift + Enter:运行以后单元格并挪动到下一个单元格
- Ctrl + Enter:运行以后单元格
- Alt + Enter:运行以后单元格并在上面插入一个新单元格
- Shift + Tab:显示以后函数或对象的文档
- Ctrl + S:保留
- A:在以后单元格的上方插入一个新单元格(在命令模式下)
- B:在以后单元格上面插入一个新单元格(在命令模式下)
- M:将以后单元格更改为Markdown单元格(在命令模式下)
- Y:将以后单元格更改为代码单元格(在命令模式下)
- D + D:删除以后单元格(在命令模式下)
- Z:撤销最初一次删除单元格(在命令模式下)
- X:切割选定的单元格(在命令模式下)
- C:复制选中的单元格(在命令模式下)
- V:粘贴选中的单元格(在命令模式下)
- Ctrl + Shift + -将以后单元格从光标所在的地位拆分成两个。(在命令模式下)
- Esc + F:找到并替换你的代码,但不替换输入。(在命令模式下)
- Esc + O:切换单元格输入(在命令模式下)
抉择多个单元格:
- Shift + Down抉择向下方向的下一个单元格。
- Shift + Up抉择向上方向的下一个单元格。(在命令模式下)
- Shift + M:合并多个选定单元格。(在命令模式下)
还能够应用%shortcuts魔术命令查看以后单元格输入区域的键盘快捷键列表:
%shortcuts
这将显示所有快捷键及其相应操作的列表。
11、暗藏不必要的输入
当你从Jupyter notebook创立报告时,看到不必要的内存代码或对象id是很烦人的。要将这些不必要的输入暗藏在起来能够应用 分号 ;
看看上面代码:
如果想屏蔽matplotlib的输入,看看上面代码,留神前面的分号:
plt.plot(x,y);
12、应用python以外的其余语言编写函数
如果你正在解决大量的大型数据集,并且numpy的速度不够快,那么你能够间接在python代码中间接编写一些c或fortran代码。
如果你想开始用c编写函数,那么你将须要cython库。
!pip install Cython
加载和应用:
%load_ext Cython %%cython def myltiply_by_2(float x): return 2.0 * x myltiply_by_2(23.)
要编写fortran函数,则须要另一个库fortrain-magic。
!pip install fortran-magic
代码如下:
%load_ext fortranmagic %%fortran subroutine compute_fortran(x, y, z) real, intent(in) :: x(:), y(:) real, intent(out) :: z(size(x, 1)) z = sin(x + y) end subroutine compute_fortran compute_fortran([1, 2, 3], [4, 5, 6])
13、扩大pandas输入中的列数和行数
默认状况下,panda的dataframe只能显示无限数量的行和列。有几种办法能够扩大Jupyter Notebook中pandas DataFrame中显示的行和列的数量。
办法1:应用pd.options.display.max_rows和pd.options.display.max_columns选项。
例如要显示最多100行50列,能够应用以下代码:
import pandas as pd pd.options.display.max_rows = 100 pd.options.display.max_columns = 50
办法2:应用pd.set_option函数设置这些选项。例如:
pd.set_option("display.max_rows", 100) pd.set_option("display.max_columns", 50)
或者能够应用head和tail办法来显示DataFrame的前几行或后几行。例如:
df.head(10) df.tail(5)
办法3:应用IPython中的IPython.display模块管制显示。例如:
from IPython.display import display display(df, max_rows=100, max_columns=50)
这将显示100行50列的DataFrame。
14、提取输出和输入单元数据
当你执行完一个单元格时,你意识到遗记给一个变量赋值,那怎么办呢?
咱们在jupyter notebook中执行单元格时,它将调配一个行号为ln:
当单元格实现执行时,咱们会失去一个输入并且能够通过传递执行编号作为索引来拜访它
Out是一个python字典,存储单元格的所有输入。咱们能够应用编号作为索引来拜访输入。
15、导出单元格的内容
当实现jupyter的测试咱们可能会想将jupyter单元中内容导出到python文件中。最简略的方法是创立一个py文件并复制粘贴代码,但这很显著不是最好的办法。
%%writefile是一个Jupyter Notebook魔法命令,能够将单元格的内容保留为Python文件。例如在单元格中有以下代码:
%%writefile example.py def add(a, b): return a + b print(add(3, 4))
你能够运行单元格后将在Jupyter Notebook所在的目录中创立一个名为example.py的文件,文件内容就是单元格内的python代码
%pycat是另外一个Jupyter Notebook魔法命令,它在Notebook的单元格中显示Python文件的内容。如果在单元格中有以下代码:
%pycat example.py
它将在单元格的输入中显示example.py文件的内容。这对于疾速查看Python文件的内容十分有用。
总结
以上就是咱们总结的一些技巧,心愿对你有所帮忙。
https://avoid.overfit.cn/post/4c9848c1cadb4f5eb98951207557b87c
作者:Anup Das