NumPy

参考书籍《利用python进行数据分析》,书中有更加全面的介绍,我只介绍点梗概和自己的理解。

实际在对表格数据的处理中,pandas的应用更多,numpy对数据的操作方法并不常用,它提供底层数据结构的作用更大。但是在机器学习时,大多都需要调整数据结构,会用到ndarry的一些方法。

开篇

背景

python本身因为其语言特点,不适合用来做计算密集型任务(相同的计算Python用的时间比Java长,比C长得多)。
python本身的数据结构拿来处理数据问题,也不够简便。

解决方案

  • NumPy提供了简便的数据结构基础,之后的python数据分析的包,如pandas、sklearn都需要以NumPy作为底层依赖包
  • 底层实现和C结合,优化了处理速度

针对ndarry数据抽象的操作

创建

  • 普通型

    • np.array() 方法接收一切可以序列化的对象,将可序列化的对象转化为多维数组
    • 数组属性

      • .dtype 数据类型
      • .ndim 维度
      • .shape 形状
      • .reshape((m,n)) 指定为(m,n)形状的新数组
  • 填充型

    • zeros()

      • 10 实际上为(10,0)
      • (3,6)
      • (2,3,2)
    • zeros_like()
    • 0,1,空值,指定值填充
    • ones() ones_like()
    • empyt() empty_like()
    • full() full_like()
  • 函数型

    • np.array()
    • np.asarray()
    • np.nrange()
    • np.eye(), np.identity()

      • 特征矩阵,对角线元素为1,其余位置为0

数据类型

  • dtype:

    • init 8,16,32,64位
    • unit 无符号整形
    • float 16,32,64,128位 , 半精度\标准精度\双精度\拓展精度
    • complex
    • bool
    • string
    • object
    • unicode_
  • astype()

    • (‘np.float64’) 指定型
    • np.dtype 指定和另一个ndarry一样的类型
    • 会创建一个新的数组
    • 实际上 numpy的数据类型相当智能,有不错的默认识别能力

数组和标量的运算

  • 会自动应用到元素级别

切片和索引

  • 切片

    • 切片是原始数组的视图,对切片的修改会直接影响到源数组。
    • .copy() 生成一个副本切片
    • 数组[一维,二维,三维…]
    • [:]表示在这个维度上选取所有
  • 布尔索引

    • 由 True False组成的具有相同size的数组
    • 布尔条件

      • & | != -
  • 花式索引

    • 利用整数数组进行索引
    • 以特定顺序索引不连续的行列
    • 花式索引总是会复制出新的数组
    • 对比:

      • arr[[1,5,7,2],[0,3,1,2]] 选出了元素(1,0),(5,3),(7,1),(2,2)
      • arr[[1,5,7,2]],[:,[0,3,1,2]]] 选出了由索引1,5,7,2行 0,3,1,2列(0行0列开始)组成的4*4的新数组

数组转换 形状\轴操作

  • 重置形状 reshape()
  • 矩阵转置 .T
  • 轴重排()

    • transpose((0,2,1))

      • 轴顺序重排
    • swapaxes(1,2)

      • 交换1,2两个轴

特殊函数

  • 一元通用函数

    • abs fabs 整数、浮点数、复数的绝对值
    • sqrt sqaure 平方根 平方
    • sign 符号 得到0 -1 1
    • ceil floor (天花板、地板)不小于的最小 不大于的最大
    • modf

      • np.modf(np.array([1.2,3.4])) 返回 (array([0.2, 0.4]), array([1., 3.]))
    • 三角函数、对数、有限检验、NaN检验
  • 二元通用函数

    • add subtract multiply divide\floor_divide 加减乘除
    • maximum,fmax minmum,fmin 最大值最小值 忽略NaN
    • mod 求余数
    • copysign 将第一个数组的符号 改为第二个数组的符号值
  • 数学、统计

    • sum 轴向和
    • mean
    • std, var 标准差
    • cumsum 累计和
    • cumprod
    • argmin 最小值索引
    • argmax 最大值索引
  • 布尔型数组

    • .all()
    • .any()
  • 排序

    • sort(轴) 沿轴的排序
  • 唯一值、成员资格

    • unique(x)
    • intersect1d(x,y) 交集
    • union1d(x, y) 并集
    • in1d(x, y) x中各个元素在y数组中的成员资格
    • setdiff1d(x, y) 差集 x-y
    • setor1d(x,y) 异或 x,y独有 (属于并集 不属于交集)
  • 线性代数

    • diag
    • dot 矩阵点乘
    • trace 对角和
    • eig 特征值 特征向量
    • inv 方阵的逆
    • svd qr slove lstsq
  • 随机函数

    • seed
    • shuffle(x)

      • 对序列x进行随机重排 不返回值 直接修改x
    • permutation(x)

      • 一个序列的随机排列 或者一个乱序的整数范围序列 返回x序列的重排
    • rand(size) 0-1的均匀分布的随机抽样 给定size
    • randint(low, high=None, size=None, dtype=’l’)
    • randn() 给定size的均值0,方差1的正态分布抽样
    • binomial(n, p, size=None) 二项分布
    • normal(loc=0.0, scale=1.0, size=None) 正态分布
    • beta() beta分布
    • chisquare() 卡方分布

      • 若n个相互独立的随机变量ξ₁,ξ₂,…,ξn ,均服从标准正态分布(也称独立同分布于标准正态分布),则这n个服从标准正态分布的随机变量的平方和构成一新的随机变量,其分布规律称为卡方分布(chi-square distribution)
    • gamma() 伽马分布
    • uniform 均布[0,1)