Numpy 中文用户指南 1. 安装

译者:飞龙html

1.1 NumPy 是什么?

原文:What is NumPy?git

NumPy是Python中用于科学计算的基础包。它是一个Python库,提供多维数组对象,各类派生的对象(如掩码数组和矩阵),以及数组快速操做的各类各样的例程,包括数学、逻辑、图形操做,排序、选择、I/O、离散傅里叶变换、基本线性代数、基本统计操做,随机模拟以及其余。程序员

NumPy包的核心是ndarray对象。它封装了均匀数据类型的n维数组,带有一些在编译过的代码中执行的操做。NumPy数组和Python标准列表有一些重要的差别:github

  • NumPy数组在建立时有固定的大小,不像Python列表(可动态增加)。改变一个ndarray的大小将建立一个新数组,并删除原有数组。数组

  • NumPy数组中的元素都必须是相同的数据类型,从而具备相同的内存大小。但有个例外:(Python,包括NumPy)对象数组的元素大小是不一样的。app

  • NumPy数组使大量数据上的高级数学运算和其余类型的操做变得容易。一般状况下,这样的操做可能比使用Python的内置列表效率更高,执行的代码更少。函数

  • 愈来愈多的基于Python的科学和数学包使用NumPy数组;虽然它们一般支持Python列表做为输入,但他们会在处理以前将这些输入转换为NumPy数组,并老是输出NumPy数组。换句话说,为了高效使用许多(也许甚至是大多数)当今基于Python的科学/数学软件,只要知道如何使用Python的内置列表类型是不够的————你还须要知道如何使用NumPy数组。优化

序列大小和速度在科学计算中尤其重要。例如考虑两个长度相同的列表中每一个元素相乘的状况。若是数据被存储在两个Python列表 a 和 b 中,咱们能够这样遍历每一个元素:ui

c = []
for i in range(len(a)):
    c.append(a[i]*b[i])

这就产生了正确的答案,但若是 a 和 b 都含有数以百万计的数字,咱们将为Python的低效循环付出代价。咱们能够这样以C语言编写代码来完成一样的任务(为清楚起见咱们忽略变量声明和初始化、内存分配等):编码

for (i = 0; i < rows; i++): {
  c[i] = a[i]*b[i];
}

这节省了全部涉及解释Python代码和操做Python对象的开销,但没有了使用Python编码的优点。此外,编码所需的工做量随数据维数的增长而增长。例如对于一个二维数组,C代码(像上面同样简写)会扩展为:

for (i = 0; i < rows; i++): {
  for (j = 0; j < columns; j++): {
    c[i][j] = a[i][j]*b[i][j];
  }
}

NumPy综合了两种状况的优势:元素级别的操做是ndarray的“默认模式”,而它又经过执行预编译的C代码来加速。在NumPy中:

c = a * b

的行为像以前的例子同样,几近于C语言的速度,可是代码正如咱们指望中的那样,就像标准的Python同样简洁。实际上,NumPy的风格还能更简洁!最后这个例子说明了NumPy的两个特性:向量化(Vectorization)和广播(Broadcasting),它们是NumPy强大之处的基础。

向量化用于描述任何缺失的显式循环、索引及其它,在代码这些事情是即时发生的,固然,是在“幕后”(预编译的C代码中)优化。向量化编码的优势不少,好比:

  • 向量化的代码更简洁易读

  • 代码更少通常意味着更少的错误

  • 代码更像标准的数学符号(一般状况下,更容易编写数学结构)

  • 向量化的结果更加“Pythonic”。没有向量化,咱们的代码会更加低效,循环也难以阅读。

广播是描述隐式的元素级操做的术语;通常来讲,NumPy中全部操做,并不仅是算术运算,还有逻辑运算,位运算,函数运算等,以这种隐式的元素层面的方式执行,就是广播。此外,在上面的例子中,a 和 b 能够是相同形状的多维数组,或者一个标量和一个数组;甚至能够是不一样的形状的2个数组,假设较小的数组能够以产生明确广播的方式,扩展为较大数组的尺寸。详细规则见 numpy.doc.broadcasting

NumPy彻底支持ndarray的面向对象。例如,ndarray是一个类,拥有许多方法和属性。它的许多方法复制了NumPy最外层命名空间的函数,让程序员彻底自由决定代码写成哪一个范式,以及哪一个范式更适合当前的任务。

1.2 安装 NumPy

原文:Installing NumPy

大多数状况下,在系统上安装NumPy的最好办法是使用为你的操做系统预编译的包。

一些可选的链接请见 http://scipy.org/install.html

有关源码包构建的说明,请见从源码中构建。这些信息主要用于高级用户。

相关文章
相关标签/搜索