本文实例讲述了Python科学计算包numpy用法。分享给大家供大家参考,具体如下:
1 数据结构
numpy使用一种称为ndarray的类似Matlab的矩阵式数据结构管理数据,比python的列表和标准库的array类更为强大,处理数据更为方便。
1.1 数组的生成
在numpy中,生成数组需要指定数据类型,默认是int32,即整数,可以通过dtype参数来指定,一般用到的有int32、bool、float32、uint32、complex,分别代表整数、布尔值、浮点型、无符号整数和复数
一般而言,生成数组的方法有这么几种:
以list列表为参数生成(用tolist方法即可转换回list):
In[3]: a = array([1, 2, 3])In[4]: aOut[4]: array([1, 2, 3])In[5]: a.tolist()Out[5]: [1, 2, 3]
指定起点、终点和步长生成等差序列或等比数列:
In[7]: a = arange(1, 10, 2)In[8]: aOut[8]: array([1, 3, 5, 7, 9])
In[13]: a = linspace(0, 10, 5)In[14]: aOut[14]: array([ 0. , 2.5, 5. , 7.5, 10. ])
In[148]: a = logspace(0, 3, 10) # 0表示起点为10^0,3表示起点为10^3,基数通过base参数指定In[149]: aOut[148]: array([ 1. , 2.15443469, 4.64158883, 10. , 21.5443469 , 46.41588834, 100. , 215.443469 , 464.15888336, 1000. ])
从迭代器中生成:
In[17]: iter = (i for i in range(5))In[18]: a = fromiter(iter, dtype=int32)In[19]: aOut[19]: array([0, 1, 2, 3, 4])
从函数中生成:
In[156]: def f(i, j):... return abs(i-j)... In[157]: fromfunction(f, (4, 4))Out[156]: array([[ 0., 1., 2., 3.], [ 1., 0., 1., 2.], [ 2., 1., 0., 1.], [ 3., 2., 1., 0.]])
还可以用zeros、ones、empty等函数快速创建数组。
矩阵视为二维数组:
In[24]: b = array([arange(5), arange(1, 6), arange(2, 7)])In[25]: bOut[25]: array([[0, 1, 2, 3, 4], [1, 2, 3, 4, 5], [2, 3, 4, 5, 6]])
根据相同的方法可以拓展到更高维。
另外,我们还可以生成自定义数据格式的数组(称为结构数组),用来记录电子表格或数据库中一行数据的信息:
In[61]: t = dtype([('name', str, 40), ('number', int32), ('score', float32)])In[62]: tOut[62]: dtype([('name', '<U40'), ('number', '<i4'), ('score', '<f4')])In[63]: students = array([('Tom', 10, 80), ('Jenny', 11, 90.5), ('Mike', 9, 98.5)], dtype=t)In[64]: studentsOut[64]: array([('Tom', 10, 80.0), ('Jenny', 11, 90.5), ('Mike', 9, 98.5)], dtype=[('name', '<U40'), ('number', '<i4'), ('score', '<f4')])In[65]: students[1]Out[65]: ('Jenny', 11, 90.5)
后面我们会看到pandas提供了一种更精致的方法处理记录。
1.2 数组的索引
简单的下标索引:
In[30]: a[2]Out[30]: 2In[31]: b[2, 1]Out[31]: 3
新闻热点
疑难解答