numpy模块
numpy是Python的一种开源的数值计算扩展库。这种库可用来存储和处理大型矩阵,比Python自身的嵌套列表结构要高效的多(该结构也可以用来表示矩阵)。
numpy库有两个作用:
- 区别于list列表,提供了数组操作、数组运算、以及统计分布和简单的数学模型
- 计算速度快,甚至要由于python内置的简单运算,使得其成为pandas、sklearn等模块的依赖包。高级的框架如TensorFlow、PyTorch等,其数组操作也和numpy非常相似。
约定俗成:import numpy as np
1.创建矩阵:
创建一维的ndarray对象:arr = np.array([1, 2, 3])
创建二维的ndarray对象arr=np.array([[1, 2, 3], [4, 5, 6]])
2.获取矩阵的行列
获取矩阵的行和列构成的数组arr.shape
3.切割矩阵
切分矩阵类似于列表的切割,但是与列表的切割不同的是,矩阵的切割涉及到行和列的切割,但是两者切割的方式都是从索引0开始,并且取头不取尾。
比如一个数组arr,若取第一行第一列,就是arr[1,1]
取大于5的元素,返回一个数组
print(arr[arr > 5])
矩阵按运算符取元素的原理,即通过arr > 5生成一个布尔矩阵
print(arr > 5)
4.矩阵元素的替换
矩阵元素的替换,类似于列表元素的替换,并且矩阵也是一个可变类型的数据,即如果对矩阵进行替换操作,会修改原矩阵的元素,所以下面我们用.copy()方法举例矩阵元素的替换。
5.矩阵的合并
-
合并两个矩阵的行,注意使用hstack()方法合并矩阵,矩阵应该有相同的行,其中hstack的h表示horizontal水平的
print(np.hstack((arr1, arr2)))
-
合并两个矩阵的列,注意使用vstack()方法合并矩阵,矩阵应该有相同的列,其中vstack的v表示vertical垂直的
print(np.vstack((arr1, arr2)))
-
合并两个矩阵,其中axis=1表示合并两个矩阵的行
print(np.concatenate((arr1, arr2), axis=1))
axis=0表示合并两个矩阵的列
print(np.concatenate((arr1, arr2), axis=0))
6.通过函数创建矩阵
- 构造0-9的ndarray数组
print(np.arange(10))
- 构造一个等差数列,取头也取尾,从0取到20,取5个数
print(np.linspace(0, 20, 5))
- 构造一个等比数列,从100取到1020,取5个数
print(np.logspace(0, 20, 5))
- 构造3*4的全0矩阵
print(np.zeros((3, 4)))
- 构造3*4的全1矩阵
print(np.ones((3, 4)))
- 构造3个主元的单位矩阵
print(np.eye(3))
- 构造一个4*4的随机矩阵,里面的元素是随机生成的
print(np.empty((4, 4))
7.矩阵的运算
也包含+,-,*,/,%,**n
运算符 | 说明 |
---|---|
+ | 两个矩阵对应元素相加 |
- | 两个矩阵对应元素相减 |
* | 两个矩阵对应元素相乘 |
/ | 两个矩阵对应元素相除,如果都是整数则取商 |
% | 两个矩阵对应元素相除后取余数 |
**n | 单个矩阵每个元素都取n次方,如**2:每个元素都取平方 |
8.矩阵的转置
矩阵的转置,相当于矩阵的行和列互换。arr.transpose()
arr.T
9.矩阵的逆
矩阵行和列相同时,矩阵才可逆。
np.linalg.inv(arr)
10.生成随机数
函数名称 | 函数功能 | 参数说明 |
---|---|---|
rand(d0,d1,⋯,dnd0,d1,⋯,dn) | 产生[0,1)内的均匀分布的随机数 | dndn为第n维数据的维度 |
randn(d0,d1,⋯,dnd0,d1,⋯,dn) | 产生标准正态分布随机数 | dndn为第n维数据的维度 |
randint(low[, high, size, dtype]) | 产生随机整数 | low:最小值;high:最大值;size:数据个数 |
random_sample([size]) | 在[0,1)内产生随机数 | size为随机数的shape,可以为元祖或者列表 |
choice(a[, size]) | 从arr中随机选择指定数据 | arr为1维数组;size为数据形状 |
RandomState()方法会让数据值随机一次,之后都是相同的数据
rs = np.random.RandomState(1)
print(rs.rand(10))