Numpy入门
写在开始前,本系列将使用jupyter notebook作为工具,如果你是windows系统,为了方便请下载Anaconda3-5.1.0-Windows-x86_64,这集成了所有你可以用到或者用不到的各种工具。如果你是mac或者linux系统,可以下载Anaconda3-5.1.0的对应版本。
在计算机中,可以将图像(尤其是数字图像)简单地看作二维数字数组,这些数字数组代表各区域的像素值;声音片段可以看作时间和强度的一维数组;文本也可以通过各种方式转换成数值表示,一种可能的转换是用二进制数表示特定单词或单词对出现的频率。
不管数据是何种形式,第一步都是将这些数据转换成数值数组形式的可分析数据,正因如此,有效地存储和操作数值数组是数据科学中绝对的基础过程。 Python中专门用来处理这些数值数组的工具: NumPy 包和 Pandas 包,首先来介绍NumPy包。
一、NumPy数组
Python 中的数据操作几乎等同于 NumPy 数组操作,甚至新出现的 Pandas 工具也是构建在 NumPy 数组的基础之上的,因此这是最重要的也是要理解的。
1.1 从Python列表创建数组
首先,可以用 np.array 从 Python 列表创建数组:不同于 Python 列表, NumPy 要求数组必须包含同一类型的数据。如果类型不匹配, NumPy 将会向上转换(如果可行),优先级:str>float>int 。
In[1]: import numpy as np
In[2]: # 整型数组:
np.array([1, 4, 2, 5, 3])
Out[2]: array([1, 4, 2, 5, 3])
如果希望明确设置数组的数据类型,可以用 dtype 关键字:
In[3]: np.array([1, 2, 3, 4], dtype='float32')
Out[3]: array([ 1., 2., 3., 4.], dtype=float32)
最后,不同于 Python 列表, NumPy 数组可以被指定为多维的。以下是用列表的列表初始化多维数组的一种方法:
In[11]: # 嵌套列表构成的多维数组
np.array([range(i, i + 3) for i in [2, 4, 6]])
Out[11]: array([[2, 3, 4],[4, 5, 6],[6, 7, 8]]
内层的列表被当作二维数组的行。
1.2 从头创建数组
面对大型数组的时候,用 NumPy 内置的方法从头创建数组是一种更高效的方法。以下是几个示例:
In[12]: # 创建一个长度为10的数组,数组的值都是0
np.zeros(10, dtype=int)
Out[12]: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
In[13]: # 创建一个3×5的浮点型数组,数组的值都是1
np.ones((3, 5), dtype=float)
Out[13]: array([[ 1., 1., 1., 1., 1.],[ 1., 1., 1., 1., 1.],[ 1., 1., 1., 1., 1.]])
In[14]: # 创建一个3×5的浮点型数组,数组的值都是3.14
np.full((3, 5), 3.14)
Out[14]: array([[ 3.14, 3.14, 3.14, 3.14, 3.14],[ 3.14, 3.14, 3.14, 3.14,