学习python的第二十二天(numpy模块(对矩阵的处理,ndarray对象)
程序员文章站
2022-04-10 22:03:35
6.12自我总结 一.numpy模块 约定俗称要把他变成np 1.模块官方文档地址 https://docs.scipy.org/doc/numpy/reference/?v=20190307135750 2.创建矩阵 1.np.array 3.对于矩阵的操作(ndarray对象的方法) 1.sha ......
6.12自我总结
一.numpy模块
import numpy as np
约定俗称要把他变成np
1.模块官方文档地址
2.创建矩阵
1.np.array
import numpy as np #创建一维的ndarray对象 arr = np.array([1, 2, 3]) print(arr) #[1 2 3] #创建二维的ndarray对象 arr = np.array([[1, 2, 3], [4,5,6]]) print(arr) ''' [[1 2 3] [4 5 6]] ''' #创建三维的ndarray对象 arr = np.array([[[1, 2, 3],[3,2,1]], [[4,5,6],[6,5,4]]]) print(arr) ''' [[[1 2 3] [3 2 1]] [[4 5 6] [6 5 4]]] ''' #我们可以这样理解.其实内这个可以相当于几何里面的,点,线,面,里面各个元素相当一个点,一个列表里面有几个元素相当于线也就是一维,然后列表里面套列表相当于线,以此类推
3.对于矩阵的操作(ndarray对象的方法)
1.shape(查看ndarray对象的形式)
import numpy as np arr = np.array([[1, 2, 3], [4,5,6]]) print(arr.shape) #(2, 3) # (矩阵的行数,矩阵的列数)
2.切分工具
import numpy as np arr = np.array([[1, 2, 3], [4,5,6]]) #取第一行全部 print(arr[0,:]) #取第一列全部 print(arr[:,0]) #取第二行第二个 print(arr[1,1],type(arr[1,1])) #5 <class 'numpy.int32'> print(arr[1,1:2],type(arr[1,1:2]))#[5] <class 'numpy.ndarray'> #取第二行第第二个和第三个 print(arr[1,1:3]) #取大于3的值 print(arr[arr>3]) #取第第一列大于3的值 arr_lien = arr[:,0] print(arr_lien[arr_lien>3])
3.生成布尔矩阵
import numpy as np arr = np.array([[1, 2, 3], [4,5,6]]) print(arr>5) ''' [[false false false] [false false true]] '''
4.矩阵的替换
用切片取值然后进行赋值
5.矩阵合并
1.np.concatenate
import numpy as np arr1 = np.array([[1, 2, 3], [4,5,6]]) arr1 = np.array([[3, 2, 4], [5,3,7]]) print(np.concatenate((arr1,arr2),axis=0或1) #前面只能写入一个容器,后面用axis控制竖着合并还是横着合并
6.矩阵的生成
1.arange
np.arage(起始值,结束值,步长)#顾头不顾尾,用法类似for 循环中的range
2.linspace/logspace
# 构造一个等差数列,取头也取尾,从0取到20,取5个数 print(np.linspace(0, 20, 5)) #[ 0. 5. 10. 15. 20.] # 构造一个等比数列,从10**0取到10**20,取5个数 print(np.logspace(0, 20, 5)) [1.e+00 1.e+05 1.e+10 1.e+15 1.e+20]
3.zeros/ones/eye
# 构造3*4的全0矩阵 print(np.zeros((3, 4))) #填的值为(行数,列数) # 构造3*4的全1矩阵 print(np.ones((3, 4))) #填的值为(行数,列数) # 构造3个主元的单位矩阵 print(np.eye(3)) #填的值为(主元的个数) ''' [[ 1. 0. 0.] [ 0. 1. 0.] [ 0. 0. 1.]] '''
4.fromstring/fromfunction
# fromstring通过对字符串的字符编码所对应ascii编码的位置,生成一个ndarray对象 s = 'abcdef' # np.int8表示一个字符的字节数为8 print(np.fromstring(s, dtype=np.int8)) def func(i, j): """其中i为矩阵的行,j为矩阵的列""" return i*j # 使用函数对矩阵元素的行和列的索引做处理,得到当前元素的值,索引从0开始,并构造一个3*4的矩阵 print(np.fromfunction(func, (3, 4)))
7.随机生成(np.random)
# randomstate()方法会让数据值随机一次,之后都是相同的数据 rs = np.random.randomstate(1) print(rs.rand(10)) # 构造3*4的均匀分布的矩阵 # seed()方法会让数据值随机一次,之后都是相同的数据 np.random.seed(1) print(np.random.rand(3, 4)) # 构造3*4*5的均匀分布的矩阵 print(np.random.rand(3, 4, 5)) # 构造3*4的正态分布的矩阵 print(np.random.randn(3, 4)) # 构造取值为1-5内的10个元素的ndarray数组 print(np.random.randint(1, 5, 10)) # 构造取值为0-1内的3*4的矩阵 print(np.random.random_sample((3, 4))) # 随机选取arr中的两个元素 print(np.random.choice(arr, size=2))
对照表
函数名称 | 函数功能 | 参数说明 |
---|---|---|
rand(d0,d1,⋯,dn) | 产生[0,1)内的均匀分布的随机数 | d~n~为第n维数据的维度 |
randn(d0,d1,⋯,dn) | 产生标准正态分布随机数 | d~n~为第n维数据的维度 |
randint(low[, high, size, dtype]) | 产生随机整数 | low:最小值;high:最大值;size:数据个数 |
random_sample([size]) | 在[0,1)内产生随机数 | size为随机数的shape,可以为元祖或者列表 |
choice(a[, size]) | 从arr中随机选择指定数据 | arr为1维数组;size为数据形状 |
4.矩阵运算(与数据类型差不多)
运算表
运算符 | 说明 |
---|---|
+ | 两个矩阵对应元素相加 |
- | 两个矩阵对应元素相减 |
* | 两个矩阵对应元素相乘 |
/ | 两个矩阵对应元素相除,如果都是整数则取商 |
% | 两个矩阵对应元素相除后取余数 |
**n | 单个矩阵每个元素都取n次方,如**2:每个元素都取平方 |
4.矩阵的行和列互换(transpose)
5.矩阵的最大最小值 ,平均值,方差
1.最大值ndarray对象
.max
2.最小值ndarray对象
.min
3.平均值ndarray对象
.mean
4.方差ndarray对象
.var
()代表区别
(axis=0)每列
(axis=1)每行
# 获取矩阵所有元素中的最大值 print(arr.max()) # 获取举着每一列的最大值 print(arr.max(axis=0)) # 获取矩阵每一行的最大值 print(arr.max(axis=1)) # 获取矩阵最大元素的索引位置 print(arr.argmax(axis=1) # 获取矩阵所有元素的平均值 print(arr.mean()) # 获取矩阵每一列的平均值 print(arr.mean(axis=0)) # 获取矩阵每一行的平均值 print(arr.mean(axis=1)) # 获取矩阵所有元素的方差 print(arr.var()) # 获取矩阵每一列的元素的方差 print(arr.var(axis=0)) # 获取矩阵每一行的元素的方差 print(arr.var(axis=1))