Numpy

Numpy 简介

2019-01-10  本文已影响6人  iOSDevLog

什么是NumPy?

NumPy是Python中科学计算的基础软件包。
它是一个提供多了维数组对象,多种派生对象(如:掩码数组、矩阵)以及用于快速操作数组的函数及API,
它包括数学、逻辑、数组形状变换、排序、选择、I/O 、离散傅立叶变换、基本线性代数、基本统计运算、随机模拟等等。

NumPy包的核心是ndarray对象。

它封装了python原生的同数据类型的n维数组,为了保证其性能优良,其中有许多操作都是代码在本地进行编译后执行的。
NumPy数组 和 标准Python Array(数组) 之间有几个重要的区别:

关于数组大小和速度的要点在科学计算中尤为重要。举一个简单的例子,考虑将1维数组中的每个元素与相同长度的另一个序列中的相应元素相乘的情况。如果数据存储在两个Python列表a和b中,我们可以迭代每个元素,如下所示:

确实符合我们的要求,但如果a和b每个包含数百万个数字,我们将为Python中循环的低效率付出代价。我们可以通过使用C语言来编写代码帮助我们更快地完成相同的任务(为了清楚起见,我们忽略了变量声明和初始化,内存分配等)

这节省了解释Python代码和操作Python对象所涉及的所有开销,但牺牲了用Python编写代码所带来的好处。此外,编码工作需要增加的维度,我们的数据。例如,对于二维数组,C代码(如前所述)会扩展为这样:

NumPy为我们提供了两全其美的解决方案:当涉及到ndarray时,逐个元素的操作是“默认模式”,但逐个元素的操作由预编译的C代码快速执行。在NumPy中:

以近C速度执行前面的示例所做的事情,但是我们期望基于Python的代码具有简单性。的确,NumPy的语法更为简单!最后一个例子说明了NumPy的两个特征,它们是NumPy的大部分功能的基础:矢量化和广播。

矢量化描述了代码中没有任何显式的循环、索引等这些事情,当然,只是在优化的、预编译的C代码中“幕后”发生了这些事情。矢量化代码有许多优点,其中包括:

广播是用来描述操作的隐式逐个元素行为的术语;一般来说,在NumPy中,所有的操作,不仅是算术操作,而且是逻辑的、按位的、功能的等,以这种隐式逐个元素的方式表现,即它们广播。此外,在上面的示例中,a和b可以是相同形状的多维数组,也可以是一个标量和一个数组,甚至是两个不同形状的数组,只要较小的数组“可以”扩展到较大的数组的形状,从而得到的广播是明确的。

NumPy完全支持面向对象的方法,同样从ndarray开始。例如,ndarray是一个类,具有许多方法和属性。它的许多方法在最外层的NumPy命名空间中映射函数,让码农们可以完全自由地按照自己的习惯编写合适的代码。

Numpy 数组

NumPy提供了一个N维数组的类型,即ndarray,它描述了相同类型的“items”的集合。 可以使用例如整数的N来索引项目(items)。

所有的ndarray都是同质的:每个条目占用相同大小的内存块,并且所有块都以完全相同的方式进行解释。如何解释数组中的每个项是由一个单独的数据类型对象指定的,其中一个对象与每个数组相关联。除了基本类型(整数、浮点数等)之外,数据类型对象还可以表示数据结构。

从数组中提取的项(例如,通过索引)由Python对象表示,其类型是在NumPy中构建的阵列标量类型之一。 阵列标量允许容易地操纵更复杂的数据排列。

image.png

NumPy的主要对象是同类型的多维数组。它是一张表,所有元素(通常是数字)的类型都相同,并通过正整数元组索引。在NumPy中,维度称为轴。轴的数目为rank。

例如,3D空间中的点的坐标 [1, 2, 1] 是rank为1的数组,因为它具有一个轴。该轴的长度为3。在下面的示例中,该数组有2个轴。
第一个轴(维度)的长度为2,第二个轴(维度)的长度为3。

NumPy的数组类被称为ndarray。别名为 array。 请注意,numpy.array 与标准Python库类 array.array 不同,后者仅处理一维数组并提供较少的功能。 ndarray 对象则提供更关键的属性:

一般有6个机制创建数组:

  1. 从其他Python结构(例如,列表,元组)转换
  2. numpy原生数组的创建(例如,arange、ones、zeros等)
  3. 从磁盘读取数组,无论是标准格式还是自定义格式
  4. 通过使用字符串或缓冲区从原始字节创建数组
  5. 使用特殊库函数(例如,random)
  6. 复制、join或以其他方式扩展或改变现有数组的方法。

Numpy 运算

数组和标量的运算:数组里的元素和标量逐一进行运算。

In [1]: import numpy as np                                                      

In [2]: a = np.arange(5)

In [3]: a                                                                       
Out[3]: array([0, 1, 2, 3, 4])

In [4]: a + 5                                                                   
Out[4]: array([5, 6, 7, 8, 9])

In [5]: a * 5                                                                   
Out[5]: array([ 0,  5, 10, 15, 20])

数组和数组的运算:如果维度相同,数组对应位置进行逐个元素的数学运算。


In [6]: a + a                                                                   
Out[6]: array([0, 2, 4, 6, 8])

In [7]: a * a                                                                   
Out[7]: array([ 0,  1,  4,  9, 16])

基本操作

改变数组形状

转置式运算

更改尺寸数量

改变阵列的种类

加入数组

拆分数组

平铺阵列

增删元素

重新排列元素

Numpy Cheat Sheet

numpy-cheat-sheet-datacamp.png numpy-cheat-sheet-dataquest.png

参考:
NumPy 中文文档
NumPy Cheat Sheet: Data Analysis in Python
NumPy Cheat Sheet — Python for Data Science

上一篇下一篇

猜你喜欢

热点阅读