目录
一、 Numpy创建列表元组 常用功能
1. Numpy版本
import numpy as np
numpy.__version__
np.__version__
# '1.20.3' 版本最好高于1.20
2.Python List的特点
# python list的特点
L = [i for i in range(10)]
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
L[5] = "Machine Learning"
L
# [0, 1, 2, 3, 4, 'Machine Learning', 6, 7, 8, 9]
# list 默认支持字符与数字
import array
arr = array.array('i', [i for i in range(10)])
arr
# array('i', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
# array常用与构建数组
# 也可单独赋值
arr[5] = 100
arr
# array('i', [0, 1, 2, 3, 4, 100, 6, 7, 8, 9])
# arr[5] = "Machine"
# arr写法限定类型 但效率高
# arr将数据看作数组,但没有将数据换成向量
3.Numpy.array
nparr = np.array([i for i in range(10)])
nparr
# array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
# 分配数组
nparr[5] = 100
nparr
# array([ 0, 1, 2, 3, 4, 100, 6, 7, 8, 9]) 单独赋值也可
# 默认为 int64 通过追加小数后数值变为 float64
nparr.dtype
# dtype('float64')
4.其余创建Numpy.array的方法
# 分配数值均为0的方法
np.zeros(10)
np.zeros(10, dtype = int)
# array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
4.1 np加入元组
# 创建二维数组 对类型进行限定
np.zeros((3,5))
np.zeros(shape = (3,5), dtype = int)
"""array([[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]])"""
# 创建指定的二维数组 3*5
np.full(shape=(3,5), value = 666)
"""array([[666, 666, 666, 666, 666],
[666, 666, 666, 666, 666],
[666, 666, 666, 666, 666]])"""
4.2 arange
[i for i in range(0 ,20 ,2 )]
# 步长为2建立数组
# [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
np.arange(0, 1, 0.2)
# python3步长无法识别浮点数 np可以
# array([0. , 0.2, 0.4, 0.6, 0.8])
4.3 linspace
# 生成以平均数为步长 0-20之间的数值
np.linspace(0, 20, 10)
"""array([ 0. , 2.22222222, 4.44444444, 6.66666667, 8.88888889,
11.11111111, 13.33333333, 15.55555556, 17.77777778, 20. ])"""
4.4 random
# 随机数的生成
# 单个随机数 0 - 10
np.random.randint(0, 10)
# 多个随机数
np.random.randint(0, 10, 10) #np.random.randint(0, 10 , 10)
np.random.randint(0, 1 , 10) #array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
# 随机数限定于4 - 8 十个
np.random.randint(4, 8, size=10) # array([4, 5, 7, 6, 6, 7, 7, 7, 5, 7])
# 可以限定随机种子
np.random.seed(666)
np.random.randint(4, 8, size=(3,5)) # 限定3*5矩阵
"""array([[4, 6, 5, 6, 6],
[6, 5, 6, 4, 5],
[7, 6, 7, 4, 7]])"""
# 随机分配0-1之间均匀分布的浮点数
np.random.random() # 0-1 之间的浮点数
np.random.random((3,5)) # 0-1之间的 3*5矩阵
# 均匀分布 均值为0 方差为1 正态分布的浮点数
np.random.normal()
np.random.normal(10, 100) # 10- 100间的随机矩阵
np.random.normal(0, 1, (3,5)) # 0 - 1间的 3*5矩阵
# 由于函数较多 api繁多 +?可查看api
np.random.normal?
np.random?
help(np.random.normal) # 查询函数文档
二、Numpy.array的基本操作
1. Numpy.array基本属性
# 数组维度判断
x = np.arange(10)
x2 = np.arange(15).reshape(3,5)
x.ndim # 数组维度 1
x2.ndim # 维度 2
x.shape # (10, )
x2.shape # (3,5)
# 列表中所有元素数量
x.size # 10
x2.size # 15
2. Numpy.array的数据访问与切片 向量
2.1 访问
# 数组的访问
x # array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
x[-1] # 第0行的最后一个元素 9
x2[0][0] # 访问1个 0
x2[(2, 2)] # 访问元组 12
2.2 切片
# 数组的切片
# 一维切片
# array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
x[0:5] # 从0 开始切到 4 一共五个整数
x[5:] # 从第五个数到结尾
x[::2] # ::2 步长 从头到尾间隔为2 array([0, 2, 4, 6, 8])
x[::-1]# 从最后一个到第一逆序输出
# 二维切片
"""array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])"""
x2[:2, :3] # 前两行 前三列
"""array([[0, 1, 2],
[5, 6, 7]])"""
x2[:2][:3] #先取前两行,后面由于解析器原因,又取前两行
"""array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])"""
x2[:2,::2] #先取前两行,后以2为步长取数
x2[::-1, ::-1] # 逆序全取
2.2 向量
x2[0, :] # 取矩阵的向量
# array([0, 1, 2, 3, 4])
x2[0, :].ndim # 取矩阵向量的维度 1
x2[:,0] # 取每行第1列
# array([ 0, 5, 10])
2.3 矩阵的修改
# 新建矩阵修改数值
# 复制矩阵数值必须用copy sub2 = X2[:2, :3]进行修改 部分数据无法更改
subx2 = x2[:2, :3].copy()
subx2 = x2[0, 0] = 100
"""array([[100, 1, 2],
[ 5, 6, 7]])"""
3. reshape操作
# reshape 无法改动x 的数值
x.reshape(2,5) # 修改x为 2*5矩阵
A = x.reshape(2, 5) # 赋值给矩阵A
"""array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])"""
B = x.shape(10,1) # 分解为10行1列的矩阵
"""array([[0],
[1],
[2],
[3],
[4],
[5],
[6],
[7],
[8],
[9]])"""