当我学习有关深度学习的优秀的 fast.ai 课程时, 我学到了很多适用于通用软件工程的干货我写这篇文章是为了总结这些技巧并与你分享
1.Jupyter Notebook 拓展
标准的 Jupyter Notebook 很不错, 但是还有更多的扩展功能可以帮助你完成工作, 并且可以将许多功能结合在一起
Install Jupyter extension package
你可以在这里找到更多 Jupyter 主题安装配置器后, 你会看到有一个新的 Nbextensions 选项卡获取这些项目打勾
- Autopep8
- Collapsible Headings
- Gist-it
A. Collapsible Headings
现在你可以折叠你的笔记本, 而不是滚动无穷的代码根据我的经验, 在进行探索性数据分析和绘制图表时, 我写了很多不干净的代码, 我必须非常努力地滚动才能到达目的地你可以展开单元格或折叠单元格以使其更清晰我想你甚至可以做一个目录 (我还没有尝试过这个扩展)
如果你以前使用过 Gist, 它基本上是一个让你共享笔记本的地方当你想要共享你的代码时, 这是非常有用的, 特别是当你有 bug 并且想要共享它的时候只要按一下按钮, 一切就会在几秒钟内完成
默认情况下, 它将发布一个匿名的 Gist, 如果你想用 Github 帐户发布它, 你需要生成一个令牌认证主要的区别是, 如果你用自己的帐号发表文章, 你可以编辑你的要点
C. Autopep8
造型很重要, 但也很无聊如果你不想太用力, 只要按一下这个小按钮, 它就会为你做所有的间隔!(PEP8 是 Python 代码的风格指南)
2. 把时间花在你的任务上, 并从中吸取教训!
我一直在声明循环之前的开始时间, 减去当前时间来获得运行时间这并没有错, 但你可以让它变得更容易使用内置的魔法命令它们对你来说可能不自然, 但使用起来真的很方便 (魔法命令以 % 开始)
让我们从一个简单的函数开始它计算的是最后一个小于 n 的 Fibonacci 数
你可以使用 %time 来计时一次运行或函数 %timeit 来计时, 并得到平均值和标准偏差这对于这些简单的函数很有用, 那么调用另一个函数的函数呢?
这里是 %prun, 我创建了一个虚函数, 可以很长时间调用 fib1() 你可以看到循环确实花了一些时间, 但大部分时间都花在了 fib1() 上
3.Cython
Cython 是一个允许你用 python 编译 C 的包, 这是 numpy 和 pandas 速度很快的主要原因确保你已经通过 Cython 安装
pip install cython
在不改变任何代码的情况下, 你可以获得即时的双重性能! 这很好, 但一点也不神奇
如果你稍微修改一下脚本, 看看你能实现什么如果你对 C 编程有一些经验, 你可能知道, 当我们声明一个变量时, 我们需要定义一个数据类型这个脚本确实改变了一点, 因为像这样的操作对于 Python 来说是独一无二的, C 语言没有这个特性因此, 我们需要分配一个临时变量来存储该值
a,b = b,a
从 582 到 48 纳秒, 速度提高了 10 倍, 而且你实际上不需要更改很多脚本对我来说, 这是令人兴奋的, 因为大部分时间你都可以使用慢速代码你所关心的是一次次被呼来唤去的使用 %prun 和一些 Cython 代码, 可以在不编译任何文件的情况下获得 C 速度
除了魔法命令, 我发现在 Jupyter 做 shell 命令也是非常有用的 (魔法命令以 % 开始, shell 命令以! 开始)
来源: http://www.jianshu.com/p/cc6995a8c999