NumPy(Numerical Python的简称) 是高性能科学计算和数据分析的基础包,提供了矩阵运算的功能,其一般与Scipy、matplotlib一起使用。其实,list已经提供了类似于矩阵的表示形式,不过numpy为我们提供了更多的函数,其部分基本功能如下:

1
2
3
4
5
6
7
8
9
ndarry,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数值
 
用于对整组数据进行快速运算的标准数学函数(无需编写循环)
 
用于读写磁盘数据的工具以及用于操作内存映射文件的工具
 
线性代数、随机生成以及傅立叶变化功能
 
用于集成C、C++、Fortran等语言编写的代码工具

  

1
2
3
4
In [9]: import numpy as np
 
In [10]: print np.version.version
1.8.2

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
In [16]: data1 = [2, 3, 5, 7, 1024]
 
In [17]: arr1 = np.array(data1)
 
In [18]: arr1
Out[18]: array([   2,    3,    5,    7, 1024])
 
In [19]: data2 = ([1,2,3,4],[5,6,7,8])
 
In [20]: arr2 = np.array(data2)
 
In [21]: arr2
Out[21]:
array([[1, 2, 3, 4],
       [5, 6, 7, 8]])
 
In [22]: arr2.ndim
Out[22]: 2
 
In [23]: arr2.shape
Out[23]: (2, 4)

  除非显式说明,否则np.array都会尝试为新建的这个数组推断出一个较为适合的数据类型,数据类型保存在一个特殊的dtype对象中,

1
2
3
4
5
In [25]: arr1.dtype
Out[25]: dtype('int64')
 
In [26]: arr2.dtype
Out[26]: dtype('int64')

  可以通过nadarry的astype方法显式地转化其他dtype

1
2
3
4
5
6
7
8
9
In [45]: evilxr = np.array([6,7,2,3,8,6])
 
In [46]: evilxr.dtype
Out[46]: dtype('int64')
 
In [47]: folat_evilxr = evilxr.astype(np.float)
 
In [48]: folat_evilxr.dtype
Out[48]: dtype('float64')

  如果将整数转换为浮点数,则小数部分将会被截断(而不是四舍五入)

1
2
3
4
5
6
7
8
9
In [57]: evilxr = np.array([6.1, 7.5, 2.9, 3.2, 8.9, 6.123])
 
In [58]: evilxr.dtype
Out[58]: dtype('float64')
 
In [59]: int_evilxr = evilxr.astype(np.int32)
 
In [60]: int_evilxr
Out[60]: array([6, 7, 2, 3, 8, 6], dtype=int32)

  

  

 

zeros和ones也可以分别创建指定长度或者形状的全0或全1数组,empty可以创建一个没有任何具体值的数组。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
In [30]: np.zeros(2)
Out[30]: array([ 0.0.])
 
In [31]: np.zeros((2,3))
Out[31]:
array([[ 0.0.0.],
       [ 0.0.0.]])
 
In [32]: np.empty((2,3,2))
Out[32]:
array([[[  2.15749693e-316,   0.00000000e+000],
        0.00000000e+000,   0.00000000e+000],
        0.00000000e+000,   0.00000000e+000]],
 
       [[  0.00000000e+000,   0.00000000e+000],
        0.00000000e+000,   0.00000000e+000],
        0.00000000e+000,   0.00000000e+000]]])

  arange是Python内置函数range的数组版

1
2
In [36]: np.arange(8)
Out[36]: array([0, 1, 2, 3, 4, 5, 6, 7])

  数组和标量之间的运算

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
In [2]: data1 = [8, 9, 5, 9]
 
In [3]: arr1 = np.array(data1)
 
In [7]: import numpy as np
 
In [8]: arr1 = np.array(data1)
 
In [9]: arr1
Out[9]: array([8, 9, 5, 9])
 
In [10]: arr1 * arr1
Out[10]: array([64, 81, 25, 81])
 
In [11]: arr1 - arr1
Out[11]: array([0, 0, 0, 0])
 
In [12]: arr1 +1
Out[12]: array([ 9, 106, 10])

  不同数组之间的运算,也叫广播