第一章:开始使用IPython

在本章中,我们首先进行一遍IPython的安装过程,在大概浏览一下IPython提供的功能。IPython提供了一个高度优化的Python控制台和Notebook。除此之外,当与第三方包,如NumPyMatplotlib,结合使用进行交互式计算时它是不可或缺的工具。这些包给Python提供了高性能计算和交互式可视化的特性。在本章的结尾,你将安装好IPython及其相关的依赖包在电脑上。你也将了解了IPython主要功能,这些功能将会在后续的章节详细介绍。

这些细节包括:

  • ①运行IPython控制台
  • ②使用IPython作为系统shell
  • ③使用历史(history)
  • ④Tab补全
  • ⑤使用%run命令运行脚本
  • ⑥使用%timeit命令快速测量时间
  • ⑦使用%pdb命令快速debug
  • ⑧使用Pylab进行交互式计算
  • ⑨使用IPython Notebook
  • ⑩定制IPython

安装IPython及推荐的包

不要问为什么,我们使用Python2.7版本,直接安装Anaconda集成包,我们所需要的东西里面都有,且各种依赖的版本相协调,自己逐个安装的话将会很麻烦,尤其是遇到版本不匹配的时候。

这些包主要是 :

  • NumPy 高性能多维数组矢量计算
  • SciPy 高级i数值计算算法
  • Matplotlib 绘图及交互式可视化
  • Matplotlib-basemap Matplotlib绘图工具箱
  • Network X 处理图问题
  • Pandas 处理任意的表数据
  • Python Image Library(PIL),图片处理算法
  • PySide Qt的Python封包,用于图形用户接口(GUI)
  • PyQt 和PySide类似,但使用不同的用户协议
  • Cython 在Python中使用C语言代码

【自己逐个安装的话注意一下版本号】

使用Python的包系统

主要是下面两个,学过Python应该会对其比较熟悉。不了解的可以复制为关键字通过搜索引擎寻找答案

  • ①easy_install
  • ②pip

可选的IPython依赖

  • ①pyreadline 提供行编辑功能
  • ②pyzmq IPython并行计算依赖,如Qt控制台,Notebook
  • ③pygments Qt控制台语法高亮
  • ④tornado 基于web的Botebook的依赖

注意:在你安装二进制IPython的时候它们将自动安装,而从源码安装却不会。

IPython的十大基础

运行IPython控制台

如果IPython已经被正确安装,你就应该能够从系统shell中使用ipython命令启动它。你可以使用这个代理替代Python解释器,如下面截图这样

当然,IPython能提供的不止这个。IPython提供了数十个小命令可以用来提高工作效率。我们可以在本书中见到很多。

这些命令中有些用来帮助你获得任意的Python函数和对象的心意。比如,你是否遇到过对怎样在派生类中使用super函数访问父类的方法?只需敲下super%pinfo super 的快捷方式)

你就会找到与super函数相关的所有信息。appending?或??等等,所有的命令或变量你都能获得他们的信息。使用示例如下:

In [1]: super?
Typical use to call a cooperative superclass method:
class C(B):
def meth(self, arg):
super(C, self).meth(arg)

使用 IPython作为系统shell

你可以使用IPython的命令行接口作为一个扩展的系统shell。你可以使用它访问你的文件系统和执行任何系统命令。比如,标准的Unix命令pwd、ls和cd在IPython中都是可用的,在windows平台下也能使用。就像下面这样:

In [1]: pwd
Out[1]: u'C:\\'
In [2]: cd windows
C:\windows

这些命令尤其是“魔法命令”是IPython的核心。在本书中我们将会使用数十个魔法命令。你可以通过魔法命令%lsmagic获得所有魔法命令的列表。

【魔法命令实际上带有一个%prefix,但是自动魔法系统缺省状态下是开启的,你可以直接忽略掉它。这个prefix是随时可用的,尤其是当一个unprefixed命令被一个同名的Python变量所掩盖的时候。%automagic命令可以开启自动魔法系统。在本书中,我们一般使用%prefix去引用魔法命令。但是请记住,如果你喜欢,完全可以忽略不用它】

使用history

就像标准的控制台一样,IPython提供历史命令的功能。然而,不同于Python控制台,IPython的命令历史扩展了对历史命令的交互会话。除此之外,很多关键字缩写可以大大减少重复的输入。

在IPython控制台代理中,使用上下键浏览所有的历史输入。如果在按下箭头键之前开始输入,只有你匹配显示你曾经输入的命令。

在任何交互会话中,你的所有输入和输出历史将会被保存在In和Out变量中,并被编号进行索引。_,__,____i,__i,___i变量保存着

最后三个输出和输入对象。_n_in变量返回第n个输出和输入历史命令。比如,让我们尝试一下

In [4]: a = 12
In [5]: a ** 2
Out[5]: 144
In [6]: print("The result is {0:d}.".format(_))
The result is 144.

在这个示例中,我们在第六行显示了输出,就是第五行的输出

Tab补全

Tab补全是非常有用的一个功能,你将会发现你会经常使用它。无论何时你开始如入任何命令、变量名或函数,敲击Tab键让IPython自动帮你补全你想要输入的内容或显示一个可能匹配的命令或变量名列表。对于文件目录也是有效的,就像系统shell一样。

你也可以使用它进行动态对象提示。输入任何Python对象之后紧跟这输入一个点,按下Tab键,IPython将会显示一个存在的属性和方法列表,就像下面这样:

n [1]: import os
In [2]: os.path.split<TAB>
os.path.split os.path.splitdrive os.path.splitext os.path.splitunc

在第二行,就像先前的代码一样,在os.path.split之后敲击Tab键,IPython接着就会显示可能的命令。

【Tab补全和私有变量:Tab补全只会显示除以下划线开头之外的对象属性和方法。原因是在Python中以下划线开头的属性和方法是私有的。若要强制IPython显示所有的私有属性和方法,在敲击Tab键之前输入myobject._。在Python中没有真正的私有和隐藏。这是Python哲学的一部分,就像一据挺有名的话所表达的那样“大家都是成年人了”】

使用%run 命令运行脚本

尽管很重要,交互式控制台在运行多命令序列时受到很大限制。编写多条命令脚本,以.py后缀保存文件,这样的Python脚本可以在IPython中以 %run+文件名的形式进行运行。除非-i选项被使用,脚本将运行在一个全新的命名空间。但脚本中定义的所有变量在脚本执行结束后都成为可用的。

让我们编写下面的Python脚本并以script.py保存:

print("Running script.")
x = 12
print("'x' is now equal to {0:d}.".format(x))

假设我们现在在文件所在的目录,我们可以在IPython中像下面这样运行它:

In [1]: %run script.py
Running script.
'x' is now equal to 12.
In [2]: x
Out[2]: 12

使用%timeit命令快速测量代码运行时间

在一个交互会话中你可以使用%timeit魔法命令快速测量代码运行时间。这可以让你评估单挑命令的运行时长。相同的命令会在一个循环中多次执行,多次运行时长的平均值作为该命令的最终评估时长。-n选项控制命令在单次循环中执行的次数,-r选项控制执行循环的次数。例如

In[1]: %timeit [x*x for x in range(100000)]
10 loops, best of 3: 26.1 ms per loop

看,当x达到100000的时候花费了26毫秒。

使用%debug命令进行快速debug

IPython带有一个强大的调试器。无论何时控制台抛出了一个异常,你都可以使用%debug魔法命令在异常点启动调试器。接着你就能调试模式下访问所有的本地变量和整个栈回溯。使u和d向上向下访问栈,使用q推出调试器。在调试器中输入?可以查看所有的可用命令列表。

你也可以使用%pdb魔法命令去激活IPython调试器,这样,每当异常抛出时,调试器就会自动运行。

使用Pylab进行交互式计算

%pylab魔法命令可以使Numpymatplotlib中的科学及算功能生效,这些功能被称为基于向量和矩阵的高效操作,交互式可视化特性。这使得在控制台进行交互式计算和动态绘图称为可能。如:

In [1]: %pylab
Welcome to pylab, a matplotlib-based Python environment [backend: TkAgg].
For more information, type 'help(pylab)'.
In [2]: x = linspace(-10., 10., 1000)
In [3]: plot(x, sin(x))

在这个示例中,我们首先定义了一个-10到10线性空间1000个数值的向量。接着我们绘制(x,sin(x))。像下面的截图一样,一个带有绘制图线的窗口就会出现。而且在窗口被打开时,控制台不会被阻塞。这就允许我们可以在窗口打开的状态下动态的修改绘制的图线。

使用IPython Notebook

Notebook将IPython的功能带到了浏览器中,可以多行编辑、交互会话再现等等。它是一种在交互式使用Python的现代的、强大的方式。

要使用Notebook,只需在shell中输入ipython notebook这个命令(需确认你已经正确安装了在安装章节提到的各种依赖)。接着就会在默认的8888断开开启一个本地的web服务。在浏览器中打开http://127.0.0.1:8888/创建一个新的Notebook

你可以在输入框内编写多行代码。这里是一些常用的快捷键:

  • ①Enter 在输入框内创建新的一行且不执行这个输入框中的代码;
  • ②Shift+Enter 执行这个框内的代码并转到下一个框内;
  • ③Alt+Enter 执行框内代码,并在之后追加一个空的输入框
  • ④Ctrl+Enter 当你不想保存输出时,进行快速的实例实验;
  • ⑤Ctrl+M 接着K 显示所有的键盘快捷键。

我们将会在后续的章节详细介绍Notebook的特性功能。

定制IPython

你可以用一个Python文件保存你的用户配置;这个文件被称作IPython配置文件。在shell中输入ipython profile create 来创建默认的配置文件。这将会在./.ipython或/.config/ipython目录下创建一个明文profile_config.py的文件夹。你可以使用ipython profile create profilename 以不同的名字创建配置文件,接着以ipython --profile=profilename 使用配置文件启动IPython。

~目录是你的家目录,例如,在Unix中/home/yourname,或者windows中c:\users\yourname、c:\documents and settings\yourname。

总结

在这一章中,我们已经学习了IPthon及其扩展Python包的多种安装方式。最直接的方式是安装一个包含所有包的独立Python发行版如Enthought Python Distribution or Canopy, Anaconda, Python(x,y), 或ActivePython。另外的一种方式是逐步以二进制形式或Python的包系统形式安装不同的包。

我们还大概浏览了IPyton提供的十大有趣特性功能。他们对于Python的交互式操作有很大联系,包括集成调试器和配置文件、Numpymatplotlib提供的交互式计算和可视化。在后续的章节中,我们将会详细学习交互式shell、Python控制台以及Notebook。

[译]学习IPython进行交互式计算和数据可视化(二)的更多相关文章

  1. [译]学习IPython进行交互式计算和数据可视化(三)

    第二章 在本章中,我们将详细学习IPython相对以Python控制台带来的多种改进.特别的,我们将会进行下面的几个任务: 从IPython中使用系统shell以在shell和Python之间进行强大 ...

  2. [译]学习IPython进行交互式计算和数据可视化(一)

    --学习IPython进行交互式Python编程.高性能数字计算和数据可视化 作者:Cyrille Rossant 译者:Tacey Wong 注:仅为个人翻译及学习,多有谬处,E文尚可的推荐阅读英文 ...

  3. [译]学习IPython进行交互式计算和数据可视化(六)

    第五章:高性能并行计算 一个反复被提及的反对使用Python进行高性能数值计算的言论是这种语言是动态解释型的,速度太慢.一种编译型低级语言,如C,能提供比它快几个数量级的运算速度.我们在第三章--使用 ...

  4. [译]学习IPython进行交互式计算和数据可视化(四)

    第三章 使用Python进行数字计算 尽管IPython强大的shell和扩展后的控制台能被任何Python程序员使用,但是这个工具最初是科学奖为科学家设计的.它的主要设计目标就是为使用Python进 ...

  5. [译]学习IPython进行交互式计算和数据可视化(五)

    第四章:交互式绘图接口 本章我们将展示Python的绘图功能以及如何在IPython中交互式地使用它们. NumPy为处理大量的多维数组结构的数据提供了高效的方法.但是看行行列列的数字总不如直接看曲线 ...

  6. [译]学习IPython进行交互式计算和数据可视化(七)

    第六章:定制IPython 对于高级用户,IPython可以进行定制和扩展.在本章结束之后,你将会知道: 怎样创建和使用自定义配置文件 怎样为高级功能进行IPython扩展 怎样在notebook中使 ...

  7. python学习笔记(2):科学计算及数据可视化入门

    一.NumPy 1.NumPy:Numberical Python 2.高性能科学计算和数据分析的基础包 3.ndarray,多维数组(矩阵),具有矢量运算的能力,快速.节省空间 (1)ndarray ...

  8. Caffe学习系列(15):计算图片数据的均值

    图片减去均值后,再进行训练和测试,会提高速度和精度.因此,一般在各种模型中都会有这个操作. 那么这个均值怎么来的呢,实际上就是计算所有训练样本的平均值,计算出来后,保存为一个均值文件,在以后的测试中, ...

  9. python 科学计算及数据可视化

    第一步:利用python,画散点图. 第二步:需要用到的库有numpy,matplotlib的子库matplotlib.pyplot numpy(Numerical Python extensions ...

随机推荐

  1. Html做三个平台原生APP啦

    DeviceOne之前介绍过了,现在来介绍一下DeviceOne快速开发到什么程度 使用js只需要5分钟就可以打出垮Android.ios.windows三大平台的纯原生UI的安装包. 只需要6个小时 ...

  2. springmvc下实现登录验证码功能

    总体思路,简单讲,就是后台生成图片同时将图片信息保存在session,前端显示图片,输入验证码信息后提交表单到后台,取出存放在session里的验证码信息,与表单提交的验证码信息核对. 点击验证码图片 ...

  3. 早安Visual Studio!一次重构之旅,夏洛特烦恼

    vs问题描述 我的IDE版本是vs2013,今天新开发了一个功能,是一个接口程序,当F5调试时,出现了莫名的错误,为什么呢?因为vs弹出了下面的一个框,只说是“未将对象引用设置到对象实例“. 点击”确 ...

  4. ssh文件传输命令:sz与rz命令

    内容概要: rz 上传文件到linux服务器,会出现选择框 sz filename 下载linux文件到windows 一般来说,linux服务器大多是通过ssh客户端来进行远程的登陆和管理的,使用s ...

  5. Kafka与Logstash的数据采集对接 —— 看图说话,从运行机制到部署

    基于Logstash跑通Kafka还是需要注意很多东西,最重要的就是理解Kafka的原理. Logstash工作原理 由于Kafka采用解耦的设计思想,并非原始的发布订阅,生产者负责产生消息,直接推送 ...

  6. JS中的宽高(基础知识很重要)

    IE中:document.body.clientWidth ==> BODY对象宽度document.body.clientHeight ==> BODY对象高度document.docu ...

  7. 22.编写一个类A,该类创建的对象可以调用方法showA输出小写的英文字母表。然后再编写一个A类的子类B,子类B创建的对象不仅可以调用方法showA输出小写的英文字母表,而且可以调用子类新增的方法showB输出大写的英文字母表。最后编写主类C,在主类的main方法 中测试类A与类B。

    22.编写一个类A,该类创建的对象可以调用方法showA输出小写的英文字母表.然后再编写一个A类的子类B,子类B创建的对象不仅可以调用方法showA输出小写的英文字母表,而且可以调用子类新增的方法sh ...

  8. 使用System.Drawing.Imaging.dll进行图片的合并

    在最近开发项目的时候有时候需要进行图片的合并,即将两张图片合并成功一张图片 合并图片的代码: #region 两张图片的合并 /// <summary > /// 将Image对象转化成二 ...

  9. JavaScript开发的技巧

    1. 使用===取代==    ==和!=操作符会在需要的情况下自动转换数据类型.但===和!==不会,它们会同时比较值和数据类型,这也使得它们要比==和!=快. "){ //速度慢 } & ...

  10. ES2005 js =>

    ES2005 js => 不会写js Learn ES2015