numpy模块安装:pip install numpy
导入模块:import numpy as np
1.生成数组:
#把Python列表转换为数组
print(np.array((1,2)))
#把Python的range对象转换为数组
print(np.array(range(5)))
#生成等差数组,0到10,11个数
print(np.linspace(0,10,11))
#对数数组
print(np.logspace(0,100,10))
#全 0 二维数组
print(np.zeros((3,2)))
#全 1 二维数组
print(np.ones((3,2)))
#单位矩阵
print(np.identity(3))
#空数组
print(np.empty((3,3)))
2.数组与数值的算术运算
x=np.array((1,2,3,4,5))
>>> x
array([1, 2, 3, 4, 5])
>>> x*2 #数组与数值 乘
array([ 2, 4, 6, 8, 10])
>>> x/2 #除
array([0.5, 1. , 1.5, 2. , 2.5])
>>> x//2 #整除
array([0, 1, 1, 2, 2], dtype=int32)
>>> x**2 #幂运算
array([ 1, 4, 9, 16, 25], dtype=int32)
>>> x+2 #相加
array([3, 4, 5, 6, 7])
>>> x%3 #余数
array([1, 2, 0, 1, 2], dtype=int32)
3.数组与数组的算术运算
>>> a=np.array((1,2,3))
>>> b=np.array(([1,2,3],[4,5,6],[7,8,9]))
>>> c=a*b #数组与数组相乘
>>> c #a中的每个元素乘以b的每一列的元素
array([[ 1, 4, 9],
[ 4, 10, 18],
[ 7, 16, 27]])
>>> c/b #数组之间除法运算
array([[1., 2., 3.],
[1., 2., 3.],
[1., 2., 3.]])
>>> c/a
array([[1., 2., 3.],
[4., 5., 6.],
[7., 8., 9.]])
>>> a/a
array([1., 1., 1.]
>>> a+a #数组之间加法运算
array([2, 4, 6])
>>> a*a #数组之间乘法运算
array([1, 4, 9])
>>> a-a #数组之间减法运算
array([0, 0, 0])
4.二维数组装置
>>> b=np.array(([1,2,3],[4,5,6],[7,8,9]))
>>> b
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
>>> b.T #转置
array([[1, 4, 7],
[2, 5, 8],
[3, 6, 9]])
>>> a=np.array((1,2,3,4))
>>> a
array([1, 2, 3, 4])
>>> a.T #一维数组装置以后和原来一样
array([1, 2, 3, 4])
5.向量内积
>>>a=np.array((5,6,7))
>>> b=np.array((6,6,6))
>>> a.dot(b)
108
>>> np.dot(a,b)
108
>>> c=np.array(([1,2,3],[4,5,6],[7,8,9]))
>>> cT=c.T #转置
>>> c.dot(a)
array([ 38, 92, 146])
>>> a.dot(c)
array([ 78, 96, 114])
6.数组元素访问
>>> b=np.array(([1,2,3],[4,5,6],[7,8,9]))
>>> b
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
>>> b[0]
array([1, 2, 3])
>>> b[0][0]
1
#数组元素支持多元素同时访问
x=np.arange(0,100,10)
>>> x
array([ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90])
>>> index=np.random.randint(0,len(x),5)
>>> index
array([0, 9, 6, 1, 8])
>>> x[index]
array([ 0, 90, 60, 10, 80])
>>> x[index]=[1,2,3,4,5]
>>> x
array([ 1, 4, 20, 30, 40, 50, 3, 70, 5, 2])
>>> x[[1,2,3]]
array([ 4, 20, 30])
7.对数组进行函数运算
>>> x=np.arange(0,100,10)
>>> np.sin(x) #所有元素求正弦值
array([ 0. , -0.54402111, 0.91294525, -0.98803162, 0.74511316,
-0.26237485, -0.30481062, 0.77389068, -0.99388865, 0.89399666])
>>> b=np.array(([1,2,3],[4,5,6],[7,8,9]))
>>> np.cos(b) #所有元素求余弦值
array([[ 0.54030231, -0.41614684, -0.9899925 ],
[-0.65364362, 0.28366219, 0.96017029],
[ 0.75390225, -0.14550003, -0.91113026]])
>>> np.round(_) #四舍五入,注意下划线
array([[ 1., -0., -1.],
[-1., 0., 1.],
[ 1., -0., -1.]])
>>> x=np.random.rand(10) #包含10个随机数的数组
>>> x=x*10
>>> x
array([8.5113528 , 8.70706816, 2.05151194, 6.5781501 , 7.88134882,
8.41475329, 0.49340078, 8.31687441, 3.77961725, 0.49344584])
>>> np.floor(x) #向下取整
array([8., 8., 2., 6., 7., 8., 0., 8., 3., 0.])
>>> np.ceil(x) #向上取整
array([9., 9., 3., 7., 8., 9., 1., 9., 4., 1.])
8.对矩阵不同维度上的元素进行计算
x=np.arange(0,10).reshape(2,5) #创建二维数组
>>> x
array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
>>> np.sum(x) #所有元素求和
45
>>> np.sum(x,axis=0) #纵向求和
array([ 5, 7, 9, 11, 13])
>>> np.sum(x,axis=1) #横向求和
array([10, 35])
>>> np.mean(x,axis=0) #纵向计算算术平均值
array([2.5, 3.5, 4.5, 5.5, 6.5])
>>> weight=[0.3,0.7] #权重
>>> np.average(x,axis=0,weights=weight)#纵向计算加权平均值
array([3.5, 4.5, 5.5, 6.5, 7.5])
>>> np.max(x) #所有元素最大值
9
>>> np.max(x,axis=0) #每列最大值
array([5, 6, 7, 8, 9])
>>> x=np.random.randint(0,10,size=(3,3))#创建二维数组
>>> x
array([[5, 9, 0],
[3, 6, 8],
[2, 4, 6]])
>>> np.std(x) #所有元素标准差
2.698879511442471
>>> np.std(x,axis=1) #每行元素标准差
array([3.68178701, 2.05480467, 1.63299316])
>>> np.var(x,axis=0) #每列元素标准差
array([ 1.55555556, 4.22222222, 11.55555556])
>>> np.sort(x,axis=0) #纵向排列
array([[2, 4, 0],
[3, 6, 6],
[5, 9, 8]])
>>> np.sort(x,axis=1) #横向排列
array([[0, 5, 9],
[3, 6, 8],
[2, 4, 6]])
9.改变数组大小
>>> a=np.arange(1,11,1)
>>> a
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
>>> a.shape=2,5 #改为2行5列
>>> a
array([[ 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10]])
>>> a.shape=5,-1 #-1表示自动计算
>>> a
array([[ 1, 2],
[ 3, 4],
[ 5, 6],
[ 7, 8],
[ 9, 10]])
>>> b=a.reshape(2,5) #reshape()方法返回新数组
>>> b
array([[ 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10]])
10.切片操作
>>> a=np.arange(10)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> a[::-1] #反向切片
array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])
>>> a[::2] #隔一个取一个
array([0, 2, 4, 6, 8])
>>> a[:5] #前5个
array([0, 1, 2, 3, 4])
>>> c=np.arange(25)
>>> c.shape=5,5
>>> c
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24]])
>>> c[0,2:5] #第0行中下标在[2,5)之间的元素
array([2, 3, 4])
>>> c[1] #第1行
array([5, 6, 7, 8, 9])
>>> c[2:5,2:5] #行下标和列下标都介于[2,5)之间的元素
array([[12, 13, 14],
[17, 18, 19],
[22, 23, 24]])
11.布尔运算
>>> x=np.random.rand(10)
>>> x
array([0.3065749 , 0.04043159, 0.75560238, 0.21521324, 0.95268858,
0.23460479, 0.49692186, 0.06280967, 0.66364411, 0.77910621])
>>> x>0.5 #比较数组中每个元素值是否大于0.5
array([False, False, True, False, True, False, False, False, True,
True])
>>> x[x>0.5] #获取数组中大于0.5的元素
array([0.75560238, 0.95268858, 0.66364411, 0.77910621])