numpy模块
- 导入
import numpy as np
数组的优势在于其可以进行批量操作,而无需借助for循环
应该充分利用这个特性,同时应该避免去遍历数组,这也是十分低效的行为
与pandas不同的是,其在每个轴方向都没有表头,只能使用数字索引
同时pandas也有更多的操作函数
- 属性
data.shape # 返回元组,分别指的行数和列数 data.dtype # 返回数组中元素的类型
- 创建
data = [[1,2,3],[1,2,3]] arr = np.array(data) # 返回了一个2行3列的array
# 其实不需要是列表,只要其是序列就可以
# 多维数组可以使用嵌套序列
# 可以传入dtype参数控制类型
np.zeros(10) # 返回一个一维的10元素的0数组 np.zeros((3,6)) # 在其内部传入元组实际上就是传入了shape
通过指定的序列函数
np.arange(15) # 其实range()函数的数组版 # 返回一个0到14,步长为1的一维数组 # 实际上就是range(14)的列表更换为数组
创建的是一个多维数组对象,即ndarray
其是一个通用的多维同类数据容器
创建完成后可以使用reshape()函数来控制形状
arr = np.arange(32).reshape((8,4)) # 首先生成一个0到31的一维array # 然后reshape,使其变为一个二维array,shape为(8,4)
同时也可以使用转置等方法来置换轴
arr.T # 对arr进行转置 # 可以注意到其只能对二维数组进行操作 arr.transponse((1,0,2)) # 此方法可以对更高维度的数组进行操作 # 将原来为0轴的数据替换到1轴等等 # 置换轴带来的后果就是索引的方法发生了变化 # 比如之前使用(3,2,4)索引的元素就需要使用(2,3,4)才能索引到 arr.swapaxes(1,2) # 将1轴和2轴进行调换
实际上索引的顺序就是按照轴的顺序(0轴则为常说的行,1轴就是常说的列)来操作的
- 类型转换
arr2 = arr1.astype(np.float64) # 此处将arr1转换为全是float64类型的arr2
# 总是生成一个新的数组
其类型有int8,int16,int32,int64,float16,float32,float64,float128,bool,object等
- 索引
数组可以执行切片操作,例如[1:2]
注意索引返回的对象只是之前数组的视图,对齐的改变也会反应到原数组
需要使用arr[1:2].copy()来获得副本
通过两次索引可以得到一个单值
arr[:2,1:] = 0 # 通过这种方式可以实现多维切片,也就是两次索引 # 而不需要去使用两个中括号 # 可以使用赋值来修改此处对应的元素
布尔操作
arr == 1 # 其可以返回一个由布尔值组成的数组 # 为1的值为True data[arr == 1, 2:] # arr必须为一个一维数组,否则不能只在行上进行索引 # 此处arr == 1返回了一个布尔一维数组,为True的就进行索引 data[data == 1] = 0 # 注意data == 1返回的是一个数组,如果其是二维,就具有二维结构 # 会把数组中为1的元素都替换为0 data[~(arr == 1), 2:] # 使用~符号可以对一个进行取反,实际上就是对布尔值取反 # 使用&和|可以组合多个条件
也可以直接传入一个整数数组来进行索引
arr[[4,3]] # 此时实际上就是索引了第四行和第三行,并将其放在了第一行和第二行的位置
- 通用函数
用于对元素进行批量操作
np.exp(arr) # 逐元素进行指数运算 # 一元通用函数,只接收一个array np.maximum(x,y) # 对比两个array,获得结果
- 向量化
数组通过向量化的方式来替代显示循环,从而提高运算速度
np.meshgrid(a,b) # 接收两个一维数组 # 其会依次遍历,生成a*b个数目的坐标矩阵 np.where(cond,xarr,yarr) # cond为一个布尔值数组 # 获得True则使用xarr中索引对应值 # 获得False则使用yarr中索引对应值 # 实际上就是在向量上进行一个if的辨识,最后也返回一个向量
数学统计
np.mean(arr,axis=0) # 计算每一行的平均值,返回一个一维数组 # 注意统计函数大多是聚合结果,会发生维度下降 # 未指定axis则在整个数组上进行计算,获得一个结果 # 同样的函数有sum,mean,std,var,min,max,argmin,argmax
涉及到布尔值的计算
(array>0).sum() # 通常会使用sum()函数来统计布尔真值的个数 boolarray.all() # 如果均为True,才返回一个True boolarray.any() # 只要包含一个True,就返回一True
排序及计算
arr.sort(axis=1) # 在1轴上进行排序,就是在每行上按照大小排序 # 返回的是拷贝 np.unique() # 返回唯一值,并排序 # 也可以进行交集,并集计算
- 文件的导入和导出
不推荐使用numpy来进行文件传递
- 生成随机数据
该功能来自于numpy中的random模块
np.random.normal(size=(4,4)) # 返回一个4*4的标准正态数据组成的数组 # 类似的分布有rand(均匀分布),randn(标准正态分布),binomial(二项分布),beta(beta分布),chisquare(卡方分布),gamma(伽马分布),uniform(均匀01分布) np.random.seed(2) # 向随机数生成器传递随机数种子 np.random.shuffle(seq) # 随机排列一个序列 np.random.rand() # 从均匀分布中抽取样本

浙公网安备 33010602011771号