本文介绍用于python数据计算的两个库 math、numpy。下篇将介绍pandas。
一、math库
数据分析常用函数:
import math
math.ceil(a) #向上取整
math.floor(a) #向下取整
math.e #e值
math.exp(a) #e的a次方
math.fabs(a) #a的绝对值
math.log10(100) # 2.0, 100以10为底的对数
math.log(100,10) # 2.0, 100以10为底的对数
math.log(math.e) # 1.0, 底不写时默认为e,同数学中ln
【更多参考 https://blog.csdn.net/qq_20412595/article/details/79838380】
二、numpy库
-
全名Numeric Python,开源的Python科学计算库。核心是ndarray对象,即多维数组(N-dimensional array)
-
创建数组
- arr = np.array(list1) #np.array是用于创建ndarray对象的函数;list1=[[1,2,3,4],[5,6,7,8]]
- np.arange(10) #输出array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
- np.arange(32).reshape((8, 4)) #
- np.zeros(10),np.zeros((3, 6)) #创建指定长度或形状的全0数组
- np.ones(10),np.ones((3, 6)) #创建指定长度或形状的全1数组
- np.empty((2,3,2)) #创建指定长度或形状的无具体值的数组【一般为未初始化的垃圾值】
- eye,identity #N*N单位矩阵(对角线为1,其余为0)
-
维度大小及数据类型
- arr.shape #(2, 4) 返回元组,表示各维度大小
- arr.dtype #dtype(‘int64’) 查看数组数据类型
- arr.astype(np.float) #注:显示转换数据类型,调用astype会创建一个新的数组
-
索引和切片
- 一维数组切片表面上和列表切片差不多
- arr[5:8] 数组切片是原始数组的视图,视图上修改会直接反映到源数组上。
- arr[5:8].copy() 若要复制而不要视图,需显示进行复制操作
- arr[0][2] or arr[0, 2] 选取单个元素
- 布尔型数组,布尔算术运算符:&和, |或
- data[data < 0] = 0
- arr[[0,1],[1,2]]花式索引:array([[1, 2, 3, 4],[5, 6, 7, 8]])=>array([2, 7])指利用整数数组进行索引 #和切片不同,花式索引总是将数据复制到新数组中 【详细参考https://zhuanlan.zhihu.com/p/123858781】
- 负数索引:从末尾开始索引,-1指末尾
- np.ix_ 函数
-
数组转置和轴对换
- 转置transpose-重塑的特殊形式,返回源数据的视图
- arr.T 简单转置-进行轴对换
- np.dot(arr.T, arr) 计算矩阵内积( X^T*X)
- arr.T 简单转置-进行轴对换
- arr.swapaxes(1,2) #也是返回视图
- 转置transpose-重塑的特殊形式,返回源数据的视图
-
数组运算
- 大小相等数组间运算会将运算应用到元素级
- 数组与标量的算术运算也会将标量值传播到各个元素
- 不同大小数组间运算叫做广播
-
通用函数(ufunc):快速的元素级数组函数
- 一元ufunc:
- np.square(arr) 平方
- np.sqrt(arr) 平方根
- np.exp(arr) 指数
- np.modf(arr) 将数组的小数和整数部分以两个独立数组的形式返回
- ~
- 二元ufunc:
- np.add(arr1,arr2) 相加
- np.subtract(arr1,arr2) 相减 前-后
- np.maximum(arr1,arr2) 元素级都取最大值
- np.power(arr1,arr2) arr1的arr2次方
- ~【更多参考 https://blog.csdn.net/weixin_42109859/article/details/105471249】
- 一元ufunc:
-
统计函数
- arr.sum() 求和
- arr.min() 最小值
- arr.max() 最大值
- arr.mean() 平均值
- arr.var() 方差
- arr.std() 标准差
-
随机函数
- np.random.rand() #0.786473418401515
- np.random.rand(3, 4) #3行4列数组,[0,1)间随机数均匀分布组成
- np.random.randn(3, 4) #3行4列数组,正态分布组成
- np.random.randint(80, 90, (3, 4)) #3行4列数组,[80,90)间整数组成
- np.random.seed(100) np.random.rand(3, 4) #seed初始化种子后,同一环境下随机结果相同
- 【更多参考 https://blog.csdn.net/weixin_43092663/article/details/123828951】
-
文件读写
- 读:arr2 = np.loadtxt(‘./infile.txt’, delimiter=‘,’) #infile文件的内容逗号分隔形式加载到数组arr2
- 写:np.savetxt(‘./outfile.txt’, arr, delimiter=‘,’, fmt=‘%d’) #arr数组以整数形式逗号分隔保存到outfile文件中【更多参考 https://blog.csdn.net/weixin_44258187/article/details/85835429】