NumPy是Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
由于是底层基于c语言,因此很快。。。
numpy.array()是一个数组对象,可以用来表示一维数组、二位矩阵甚至任意维度的数据。
首先需要导入库
>>> import numpy as np
创建一个数组
>>> np.array([1,2,3,4,5])
>>> array([1, 2, 3, 4, 5])
也可以用zeros创建全零的数组,下例创建了3行2列的数组
>>> np.zeros((3,2))
>>> array([[0., 0.],
[0., 0.],
[0., 0.]])
可以用shape获取数组的尺寸,输出行数、列数,数组可以多维度的
>>> a = np.zeros((3,2))
>>> a.shape
>>> (3, 2)
也可以用ones创建全为1的数组
>>> np.ones((2,4))
>>> array([[1., 1., 1., 1.],
[1., 1., 1., 1.]])
也可以用arange创建递增或者递减的数列
>>> np.arange(3,7)
>>> array([3, 4, 5, 6])
linspace(区间a,区间b,输出样本总数)会返回在某个区间,等间距分布的数字
>>> np.linspace(0,1,5)
>>> array([0. , 0.25, 0.5 , 0.75, 1. ])
还可以用random.rand生成随机的数组
>>> np.random.rand(2,4)
>>> array([[0.88435767, 0.54556755, 0.08636983, 0.14928895],
[0.83287117, 0.20109339, 0.2957669 , 0.29206262]])
在NumPy中数组默认的类型是64位的浮点数
>>> a = np.zeros((4,2))
>>> a.dtype
>>> dtype('float64')
可以在创建过程中通过dtype指定数据类型,类型有
整型np.int8/16/32/64
无符号整型np.uint8/16/32/64
浮点数np.float32/64
布尔值bool
字符串str
>>> a = np.zeros((4,2), dtype = np.int32)
>>> a.dtype
>>> dtype('int32')
对于现有的数组可以通过astype转换数据类型,下例从浮点型转为整型
>>> a = np.zeros((2,4))
>>> b = a.astype(int)
>>> b
>>> array([[0, 0, 0, 0],
[0, 0, 0, 0]])
一些数组的基本运算
两个相同尺寸的数组可以进行基本的四则运算
>>> a = np.array([1,2,3])
>>> b = np.array([4,5,6])
>>> a+b
>>> array([5, 7, 9])
>>> a/b
>>> array([0.25, 0.4 , 0.5 ])
矩阵的点乘运算
>>> np.dot(a,b)
>>> 32
矩阵的乘法运算
>>> a = np.array([[1,2],
[3,4]])
>>> b = np.array([[2,0],
[0,2]])
>>> a @ b
>>> array([[2, 4],
[6, 8]])
使用sqrt求平方根,sin,cos三角函数,对数log,指数power
>>> a = np.array([1,2,3])
>>> np.sqrt(a)
>>> array([1. , 1.41421356, 1.73205081])
>>> np.sin(a)
>>> array([0.84147098, 0.90929743, 0.14112001])
>>> np.log(a)
>>> array([0. , 0.69314718, 1.09861229])
>>> np.power(a,2)
>>> array([1, 4, 9], dtype=int32)
也可以实现广播操作,矩阵乘以一个数
>>> a = np.array([1,2,3])
>>> a * 5
>>> array([ 5, 10, 15])
对于不同尺寸的数组也可以进行运算,在运算前NumPy会把两个数组扩展至相同的尺寸,再进行操作
>>> a = np.array([[1],
[10],
[20]])
>>> b = np.array([0,1,2])
>>> a+b
>>> array([[ 1, 2, 3],
[10, 11, 12],
[20, 21, 22]])
还可以用min和max返回数组中的最小值和最大值
>>> a = np.array([1,2,3,4,5])
>>> a.min()
>>> 1
>>> a.max()
>>> 5
argmin返回最小元素所在的索引,argmax返回最大元素所在的索引,sum返回数组总和,mean返回数据的平均值,median返回数据的中位数,var返回数据的方差,std返回数据的标准差
>>> a.argmin()
>>> 0
>>> a.argmax()
>>> 4
>>> a.sum()
>>> 15
>>> a.mean()
>>> 3.0
>>> np.median(a)
>>> 3.0
>>> a.var()
>>> 2.0
>>> a.std()
>>> 1.4142135623730951
对于多维的数组,还可以加入一个参数axis,当axis=0时表示行(每一行相加),axis=1时表示列(每一列相加)
>>> a = np.array([[1,2,3,4,5],
[5,6,7,8,9]])
>>> a.sum(axis = 0)
>>> array([ 6, 8, 10, 12, 14])
>>> a.sum(axis = 1)
>>> array([15, 35])
可以获取数组中指定位置的元素
>>> a = np.array([[1,2,3],
[4,5,6]])
>>> a[0,1]
>>> 2
按照条件帅选出符合条件的元素,返回所以小于3的元素
>>> a[a < 3]
>>> array([1, 2])
切片,0:2代表可以取[0,2)这个区间
>>> a[0, 0:2]
>>> array([1, 2])
后面再加一个冒号可以代表步长,负数代表从右往左
>>> a = np.array([1,2,3,4,5,6,7,8,9])
>>> a[0:9:2]
>>> array([1, 3, 5, 7, 9])