乐趣区

关于人工智能:15个节省时间的Jupyter技巧

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

退出移动版