numpy简介
numpy是数学科学最基本的python库,底层是c语言实现,运行效率堪比C/Matlab,主要是做矩阵运算
矩阵常识(二维数组)
- 向量:1*N或N*1的矩阵
- 标量:1*1矩阵
- 数组:N维数组,矩阵延申
- 特殊矩阵:全0或全1矩阵
- 单位矩阵:任何矩阵乘单位矩阵等于其自身
常见创建数组的方法
- 通过其他数据类型转换
- np.array([0, 1, 2])
- np.array((0, 1, 2))
- 通过原生数组创建
- np.zeros(n) # 创建n个0的数组
- np.ones(n) # 创建n个1的数组
- np.full((x, y), z) # 创建一个以z填充,形状为x*y的数组
- np.zeros_like/ones_like/full_like() # like后缀:用与传入数据相同的数据结构和类型生成数组
- np.arange(a, b, c) # 生成从a到b的数组,c是跨度,为可选参数
- np.arange(a) # 生成从[0, a)的数组
- np.linspace(开始, 结束, 生成个数) # 创建等差数列
- np.eye(10, 10, 2) # 生成对角矩阵(可调对角线位置
- 通过特殊库函数(random
- np.random.
- rand(3, 3) # 生成3*3的数组,每个数都是0-1的随机数
- randint(n) # 生成[0, n)之间的随机数
- randint(a, b,(c*d)) # 生成c*d维数组,每个数都是[a, b)之间的随机数
- randn(a, b) # 生成a*b正态分布数组(指矩阵内数据出现的次数呈正态分布
常见属性
- np对象.dtype ??# 数组数据类型
- np对象.ndim ??# 数组维度
- np对象.shape ??# 形状(n*n
- np对象.size ????# 大小(有多少个元素)
- np对象.itemsize ??# 每个数据占的字节大小
- np对象.nbytes ??# 全部数据占的字节大小
访问数组元素的方式
np对象[0][2]
# 等价于
np对象[0, 2]
运算(所有操作都是对数组内全部数据操作
a = np.full((2, 2), 1.2, dtype = float)
a + 10
# 等价于
np.add(a, 10)
比较
# ><==:返回bool类型的数组,此数组内每个值反映原数组内每个值是否符合条件
# 返回bool值,判断数组内全部值是否都符合条件
np.all(数组对象 操作符 条件)
# 返回bool值,判断数组内是否有一个值符合条件
np.any(数组对象 操作符 条件)
排序
统计数据方法
-
注意
- np.sum比sum效率高很多
- np统计方法加参数axis=1求每行和/每行最大值
-
求和
-
求最大值 np.max(c)
切片
拼接
a = np.array([[0, 2, 4],[1, 3, 5]])
# 按行拼接(axis默认0
np.concatenate([a, a, a])
array([[0, 2, 4],
[1, 3, 5],
[0, 2, 4],
[1, 3, 5],
[0, 2, 4],
[1, 3, 5]])
# 按列拼接
np.concatenate([a, a, a], axis = 1)
array([[0, 2, 4, 0, 2, 4, 0, 2, 4],
[1, 3, 5, 1, 3, 5, 1, 3, 5]])
序列化文件
# 保存
np.save(文件名, 数组)
# 加载
np.load(文件名.npy, 数组)
# 序列化多个array
np.savez(文件名, 名字1 = 数组1, 名字2 = 数组2)
# 加载具有多个array的文件
np.load(文件名.npz)
根据名字访问对应数组
np.load(文件名.npz)[名字]
|