Python与机器学习(一) NumPy与SciPy库

来源:互联网 发布:iphone7导出照片到mac 编辑:程序博客网 时间:2024/06/04 18:08

简介

  • Python在科学计算方面提供了完备的程序扩展库,包括机器学习、数学分析、可视化库、GPU并行库等。
  • Anaconda使得程序扩展库的管理非常方便,这个Python发行版本除了附带了ipython编程环境,也包含了200多个工具库:
    • NumPy库,一个提供多维数组及矩阵运算功能的基础类库;
    • SciPy库,在NumPy基础上添加众多科学计算所需的各种工具,它的核心计算部分是一些久经考验的Fortran数值计算库;
    • Pandas库,在NumPy基础上提供类似电子表格的数据结构DataFrame,并以此为核心提供大量的数据的输入输出、清洗、处理和分析函数;
    • Matplotlib库,一个简单且有效的数值可视化绘图类库
    • Scikit-Learn库,一个专门面向机器学习的算法库;
    • TensorFlow,深度学习算法库

NumPy库

主要用于处理n维数组对象的Python工具包。

创建数组

  • np.arange([start, ]stop, [step ]) 类似Python的range函数,注意不包含结尾
  • linspace(start, stop, num=50, endpoint=True)函数创建等差数列。可以通过endpoint关键字指定是否包括终值,缺省包括终值
  • logspace()函数和linspace()函数类似,不过它创建等比数列
  • zeros(shape), ones(shape), full(shape, fill_value) 创建给定形状的数组
  • eye(N, M=None) 创建对角线元素为1,其他元素为0的n*m二维数组
  • rand(N, M) 产生0到1之间的随机浮点数,它的所有参数用于指定所产生的数组的形状
  • randn(N, M) 产生标准正态分布的随机数,参数含义与rand()相同
  • randint(start, stop, shape) 产生指定范围的随机整数,包括起始值,但不包括终值

存取

  • 保存成专有格式
np.save("arr.npy", arr)    #以arr.npy的文件名保存数组arrs = np.load("arr.npy")     #读取arr.npy文件并返回给snp.savez("save.npz", a, b, k_c=c) #保存多个数组
  • 保存到txt或csv
>>>arr = np.genfromtxt("myfile.csv", delimiter = ',', dtype = "string")   #从myfile.csv中导入数据,以逗号为间隔符,类型为string型>>>np.savetxt("myarray.txt", arr, delimiter = ' ')      #将arr保存到myarray.txt文件,以空格为间隔符

属性和方法

  • shape属性与reshape()方法
  • dtype属性与astype()方法
  • size属性:元素的个数
  • ndim属性:维数

切片

重要:切片索引与Python列表的切片索引不同,通过切片获取的新的数组是原数组的一个视图,它与原数组共享同一块数据存储空间,切片的修改会反映到原数组上。

  • 标准切片 a[1], a[1:10:2]
  • 多维切片 b[2::2,::2] 表示从第2行开始以步长2开始切片,读取从第0列开始步长为2的所有列的元素
  • 布尔切片 a[a < 3] 表示取得小于3的所有元素

变形

  • np.ravel(a) 转成行向量(降为一维)
  • a.T 转置
  • a.resize(N, M) 改变形状。和reshape不同的是,他会改变自身
  • np.vstack((a, b)) 竖直拼接两个数组
  • np.hstack((c, d)) 水平拼接两个数组
  • np.vsplit(a, 3) 竖直切3刀
  • np.hsplit(b, 3) 水平切3刀

运算

  • 算术运算
    • 二目运算 np.add(a, b) subtract multiply power remainder
    • 单目运算 negative floor abs sqrt
  • 比较运算 np.array([1, 2, 3]) < np.array([3, 2, 1])
  • 统计运算 np.sum(a, axis=None) 默认对全部元素求和,axis=0对 第0维元素(列)求和,返回一行
  • 矩阵乘法 先转换为matrix对象才能做矩阵运算。np.matrix(a) * np.matrix(b)

例子

e.g. 使用如下公式计算π:
π = 4/1 - 4/3 + 4/5 - 4/7 + 4/9 - 4/11 + 4/13 - …
示例代码:

import numpy as npn = 100000np.sum(4.0 / np.r_[1:n:4, -3:-n:-4])>> 3141592653589833

SciPy库

线性代数 linalg模块

  • linalg.det()函数计算方阵的行列式
  • linalg.inv()函数计算方阵的逆
  • linalg.norm()函数计算方阵的模
  • 特征向量 evalues, evectors = linalg.eig(A)

拟合与求解 optimize模块

  • optimize.curve_fit() 使用最小二乘法实现线性拟合
  • optimize.leastsq() 最小二乘拟合
  • fmin() 函数极值求解
  • fsolve() 非线性方程组求解

插值interpolate模块

插值是离散函数逼近的重要方法,利用它可通过函数在有限个点处的取值状况,估算出函数在其他点处的近似值。与拟合不同的是,要求曲线通过所有的已知数据。

  • interp1d(x, y, kind=’linear’, …) 一维插值
  • UnivariateSpline() 噪声数据插值
  • griddata() 多维插值,主要用于重构图片

统计stats模块

  • 连续概率分布
  • 离散概率分布
  • 描述与检验函数

参考:python机器学习

阅读全文
0 0
原创粉丝点击