前言
本文只适用于已经了解如何使用jupyter的选手,因此如果不知道或者不了解jupyter的使用,那么应该先学一下.本文主要用于指导新手入门了解各种函数的使用,具体函数的使用方法可以寻找一些其他资料或者查看下方我贴出的官方文档,本文所有代码基于Anaconda5.3.0版本
什么是Numpy(Numerical Python)?
- 是一个开源的Python科学计算库
- 使用Numpy可以方便的使用数组,矩阵进行计算
- 包含线性代数,傅里叶变换,随机数生成等大量函数
对于统一的数值计算任务,使用Numpy比直接使用Python代码实现,有以下优点:
- 代码更简洁:Numpy直接以数组、矩阵为粒度计算并且支撑大量的数学函数,而python需要用for循环从底层实现;
- 性能更高效: Numpy的数组存储效率和输入输出计算性能,比Python使用List或者嵌套List好很多;
注:Numpy的数据存储和Python原生的List是不一样的
注:Numpy的大部分代码都是C语言实现的,这是Numpy比纯Python代码高效的原因
Numpy是Python各种数据科学类库的基础库
比如: Scipy,Scikit-Learn、TensorFlow,pandas等
下面用一份代码测试原生Python代码和numpy的速度
可以看到这个速度差距有近百倍,其实这也就是因为numpy的底层是C,而C的速度一般为Python速度的100-200倍.
Numpy ndarray对象
NumPy定义了一个n 维数组对象,简称ndarray对象,它是一个一系列相同类型元素组成的数组集合。数组中的每个元素都占有大小相同的内存块。
ndarray 对象采用了数组的索引机制,将数组中的每个元素映射到内存块上,并且按照一定的布局对内存块进行排列(行或列)。
使用numpy可以快速的创建n维数组
array
array(object, dtype=None, copy=True, order=‘K’, subok=False, ndmin=0)
arange
arange([start,] stop[, step,], dtype=None)
根据start与stop指定的范围以及step设定的步长,生成一个ndarray.
linspace
linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
返回在间隔[开始,停止]上计算的num个均匀间隔的样本。数组由一个等差数列构成。
logspace
logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)
返回在间隔[开始,停止]上计算的num个均匀间隔的样本,数组是一个等比数列构成.
zeros/ones
zeros(shape, dtype=float, order=‘C’)
ones(shape, dtype=None, order=‘C’)
创建一份全为0/1的由shape指定维度的数组
Numpy的数组属性
Numpy的数组中比较重要的ndarray对象属性有
- 1:ndarray.shape ndarray对象的维度
返回一个包含数组维度的元组,对于矩阵,n行m列,它也可以用于调整数组维度
reshape(shape, order=‘C’)
将原有的数组的维度修改为新的shape定义的维度,要求原有的数组内的数据量必须等于reshape内参数相乘后的积,否则报错
resize(a, new_shape)
如果新数组大于原数组,则新数组将填充a的重复副本,此行为与a.resize(new_shape)不同,后者用0而不是重复的a填充. - 2:ndarray.ndim ndarray对象的稚
- 3:ndarray.size ndarray对象的数据个数
- 4:ndarray.dtype ndarray对象的元素类型
astype(dtype, order=‘K’, casting=‘unsafe’, subok=True, copy=True)
返回修改后的数据类型
- 5:ndarray.itemsize 返回数组中每个数据类型所占用的字节数
切片与索引