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文件的内容非常有用。
总结 以上就是我们总结的一些技巧,希望对你有所帮助。
高性能轻触开关产品特性有哪些
传祺GS4 PLUS:搭载2.0T发动机
一名Github高级工程师眼中的理想领导是什么样的?
SQZ正在开发另一种新型肿瘤细胞治疗平台
伊顿发布全新中压智能开关柜iET1系列,实现智能和高效运营的用电体验
15个节省时间的Jupyter技巧!
币币交易所源码开发OTC场外交易所搭建,源中瑞Dave
浅析产业互联网和工业互联网的差异
韩国民众冒雨抗议部署“萨德”,什么是萨德?部署萨德的后果是啥!
不同雷达的电磁信号调制方式
华耀公司电源智能智造数字化解决方案入选2023年合肥市工业互联网创新应用示范项目
如何实现PBFT的数学证明
MIP封装技术成为Micro LED产业的选项
小米6下月发布 还有红米pro2
低功耗PC时钟发生器
贸泽开售Analog Devices用于卫星通信的 ADMV4540 K波段正交解调器
5G消息对金融行业的发展有什么影响?
美超微发布首个全新H12代A+服务器系列
探讨红外技术“芯”动态,畅谈传感技术“芯”未来
HarmonyOS应用开发例子-ets-video组件案例