numpy模块
import numpy as np
numpy模块用于创建数组和数组的运算,是pandas、sklearn等模块的依赖包
列表
l = [1,2,3]
print(l) # [1, 2, 3]
1.list的内置方法:1.索引 2.切片 3.长度 4.成员 5.for 6.其他内置方法
2.np.array和list的区别
- list是对一维数组进行操作,numpy对多维数组进行操作
用numpy模块中的numpy.array创建数组
一维数组
1.一维数组只有一行,相当于现实中的一条线
ar = np.array(l)
print(ar) # [1 2 3]
2.列表推导式
l1 = [i for i in range(1,10,1)]
print(l1) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
3.numpy中的类似方法np.arange()
ar1 = np.arange(9)
print(ar1) # [0 1 2 3 4 5 6 7 8]
ar2 = np.arange(0,9,2)
print(ar2) # [0 2 4 6 8]
二维数组(用到最多)
有行有列,相当于一个面,也可以说是一个列表中装了多个一维
arr1 = np.array([ [1, 2, 3], [4, 5, 6] ])
print(arr1)
'''
打印结果:
[[1 2 3]
[4 5 6]]
'''
三维数组(了解)
x,y,z坐标。相当于一个体,也可以说是一个列表中装了多个二维数组
arra1 = np.array([ [ [1, 2, 3], [4, 5, 6] ], [ [1, 2, 3], [4, 5, 6] ], [ [1, 2, 3], [4, 5, 6] ] ])
print(arra1)
'''
打印结果:
[[[1 2 3]
[4 5 6]]
[[1 2 3]
[4 5 6]]
[[1 2 3]
[4 5 6]]]
'''
数组的运算
1.以二维数组为例,获取多维数组的行和列
arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
'''
列一 二 三 四
[[ 1 2 3 4] 第一行
[ 5 6 7 8] 第二行
[ 9 10 11 12]] 第三行
'''
print(arr.shape) # (3, 4),以元组的形式返回3行4列
print(arr.shape[0]) # 3行
print(arr.shape[1]) # 4列
2.多维数组的索引
- 中括号加索引,行和列用逗号隔开
#一定要记住索引都是从0开始的
print(arr[1, 2]) # 7 第二行第三列的元素
print(arr[0,3::-1]) # [4 3 2 1] 第一行从第四列开始往前取所有元素
print(arr[1, :]) # [5 6 7 8] 第二行所有元素
print(arr[2,1:3]) # [10 11] 第三行从第二列到第三列的元素
print(arr[:, 2]) # [ 3 7 11] 第三列所有元素
print(arr[:2, 3]) # [4 8] 第四列从第一行到第二行的元素(切片顾头不顾尾)
# 可以把通过索引取值或切片方法取出来的元素赋值
arr[0,:] = 1 # 第一行的元素全部赋值为1
print(arr)
'''
[[ 1 1 1 1]
[ 5 6 7 8]
[ 9 10 11 12]]
'''
3.高级功能
- 可以用比较运算符得到多维数组中元素的bool值
print(arr>=10)
'''
打印结果:
[[False False False False]
[False False False False]
[False True True True]]
'''
# 通过bool值进行数组中数据的过滤
# 把bool值为True的元素通过索引取值的方法取出来进行下一步操作
arr[arr >= 10] = 0
print(arr)
'''
[[1 2 3 4]
[5 6 7 8]
[9 0 0 0]]
'''
4.多维数组的合并
arr1 = np.array([[1, 1, 1], [1, 1, 1]])
arr2 = np.array([[2, 2, 2], [2, 2, 2]])
# vstack和hstack只能放一个参数,这个参数必须是容器
# np.vstack:按垂直方向(行顺序)堆叠数组构成一个新的数组
arr3 = np.vstack([arr1, arr2]) #里面以元组形式或列表形式放都可以
print(arr3)
'''
[[1 1 1]
[1 1 1]
[2 2 2]
[2 2 2]]
'''
# np.hstack:按水平方向(列顺序)堆叠数组构成一个新的数组
arr4 = np.hstack([arr1, arr2])
print(arr4)
'''
[[1 1 1 2 2 2]
[1 1 1 2 2 2]]
'''
# np.concatenate合并多维数组,默认是按列合并(也就是每行的元素个数必须相同)
arr5 = np.concatenate((arr1, arr2))
print(arr5)
'''
[[1 1 1]
[1 1 1]
[2 2 2]
[2 2 2]]
'''
# 在numpy中,为了统一处理,只要有axis参数的,axes=0就是列,axis=1就是行
arr5 = np.concatenate([arr1, arr2], axis=0) # 垂直
print(arr5)
'''
[[1 1 1]
[1 1 1]
[2 2 2]
[2 2 2]]
'''
arr5 = np.concatenate([arr1, arr2], axis=1) # 水平
print(arr5)
'''
[[1 1 1 2 2 2]
[1 1 1 2 2 2]]
'''
5.通过函数方法创建多维数组
- 一维数组
print(np.arange(10)) # [0 1 2 3 4 5 6 7 8 9]
- np.ones() 全1矩阵
print(np.ones([3,4])) # 默认是浮点型,dtype=float
'''
[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]
'''
print(np.ones((3,2,1),dtype=int)) # 2和1控制二维数组中的行和列,3才是三维数组中的“z轴”
'''
两行一列三层
[[[1]
[1]]
[[1]
[1]]
[[1]
[1]]]
'''
- np.zeros() 全0矩阵
# bytes默认是浮点型,可以用bytes=int输出整型格式
print(np.zeros((3, 2, 2))) # 3控制三维的层数,2,2控制二维数组的行和列
'''
两行两列三层
[[[0. 0.]
[0. 0.]]
[[0. 0.]
[0. 0.]]
[[0. 0.]
[0. 0.]]]
'''
- np.eye() 构造多个主元的单位矩阵
'''
主元就是每个非零行第一个非零元素就是主元。
1是主元,在矩阵中从左上角斜着排放到右下角
构成行和列相等的矩阵
'''
print(np.eye(4)) # 构造4个主元的单位矩阵
'''
[[1. 0. 0. 0.]
[0. 1. 0. 0.]
[0. 0. 1. 0.]
[0. 0. 0. 1.]]
'''
- np.empty() 构造一个随机矩阵,里面的元素是随机生成的
print(np.empty([3,2]))
'''
[[2.12199579e-314 2.12199579e-314]
[2.12199579e-314 4.24399158e-314]
[4.24399158e-314 4.24399158e-314]]
'''
6.矩阵的运算
'''
+ 两个矩阵对应元素相加
- 两个矩阵对应元素相减
* 两个矩阵对应元素相乘
/ 两个矩阵对应元素相除,如果都是整数则取商
% 两个矩阵对应元素相除后取余数
**n 单个矩阵每个元素都取n次方,如arr**2:arr中的每个元素都取平方
'''
7.多维数组的点乘和转置(了解)
arr1 = np.array([[1, 1, 1], [1, 1, 1]])
arr2 = np.array([[1,1,1],[2,2,2],[3,3,3]])
arr3 = arr2.T # 转置,将行和列的元素进行互换
print(arr3)
'''
[[1 2 3]
[1 2 3]
[1 2 3]]
'''
arr = np.dot(arr1,arr3) # 点乘
print(arr)
'''
[[3 6 9]
[3 6 9]]
'''
8.其他
# 求逆
np.linalg.inv()
#最大值
print(arr1.max()) # 1
# 最小值
print(arr2.min()) # 1
# np.random.rand() 生成随机元素的矩阵
print(np.random.rand(3,3)) # 元素的值在0到1之间
'''[[0.343468 0.54926958 0.38615662]
[0.32390036 0.37597149 0.5029658 ]
[0.84369977 0.0396894 0.49684206]]'''
# np.random.seed() 随机数种子
np.random.seed(1)
print(np.random.rand(3,3)) # 永不随机,固定的
'''
[[4.17022005e-01 7.20324493e-01 1.14374817e-04]
[3.02332573e-01 1.46755891e-01 9.23385948e-02]
[1.86260211e-01 3.45560727e-01 3.96767474e-01]]
'''
# 和上面一样,固定随机元素,永不随机
res = np.random.RandomState(1)
print(res.rand(3,3))
'''[[4.17022005e-01 7.20324493e-01 1.14374817e-04]
[3.02332573e-01 1.46755891e-01 9.23385948e-02]
[1.86260211e-01 3.45560727e-01 3.96767474e-01]]'''