numpy

学完第一感觉,相见恨晚
那我浅浅做个知识点总结,方便以后查找

Array创建和生成

方式:

  • 列表、元组
  • arange()
  • linspace()/logspace() (常用)
  • ones()/zeros() (自己常用)
  • random() (常用)
  • 读取文件

具体内容参照专栏其他博客

统计和属性

numpy 具有基本的统计属性
主要内容:

  • 尺寸相关
  • 最大、最小、中位、分位值
  • 平均、求和、标准差等

尺寸:维度、形状、数据量

  • 维度 arr.ndim
  • 形状 arr.shape
  • 数据量 arr.size

最值分位

  • 最大/小值 arr.max/arr.amax arr.min
  • 中位数 np.median()
  • 分位数 (1/4)np.quantile() (keepdims=True 保持维度)

平均数 标准差

  • 平均值 np.average()
  • 求和 np.sum()
  • 累计求和 np.cumsum() (按行或者按列)
  • 标准差 std()
  • 方差 np.var()

形状和转换

内容:

  • 改变形状
  • 反序
  • 转置

改变形状

  • 扩展一维 expand_dima
  • 去除一维 squeeze
  • 改变形状 reshape resize(不会自己生成新的array)
  • 降为一维 ravel

反序

  • 一维 arr[::-1]
  • 二维 arr[::-1,:] ,arr[:,::-1], arr[::-1,::-1]

转置

  • 一维(转置不变) 和二维 arr.T
  • 超过二维建议 np.transpose

分解和组合

  • 切片和索引
  • 拼接
  • 重复
  • 分拆

切片和索引

重点:
切片和索引是通过对已有 array 进行操作而得到想要的「部分」元素的行为过程。其核心动作可以概括为:按维度根据 start:stop:step 操作 array。
不同的方式:

  • 取第 0 行 arr[0]
  • 取第 0 行第 1 个元素 arr[0, 1]
  • 第 1-2 行 arr[1:3]
  • 第 1,3 行 arr[[1, 3]]
  • 第 1-2 行,第 1 列 arr[1:3, 1]
  • 第 1,3 行,第 0 列 arr[[1,3], [0]]
  • 第 3 行到最后一行 arr[3:]
  • 第 1-3 列 arr[:3, 1:3]
  • 第 1 行到第 4 行,间隔为 2,即第 1、3 arr[1: 4: 2]
  • 第 1、3 行,第 0、2 列 arr[1:4:2, 0:3:2]
  • 第一列的值,其实是所有其他维度第 1 维的值 arr[…,1]
  • 与上面类似,但用的更多 arr[:,1]

拼接

  • np.concatenate
  • np.stack
  • np.hstack/np.vstack(和stack没有关系)

重复

重复可以指定要重复的维度。需要注意的是:是一个维度一个维度依次重复,而不是整个 array 重复。

  • np.repeat

分拆

  • `np.split
  • np.vsplit /np.hsplit

筛选 过滤

  • 条件筛选
  • 提取(按条件)
  • 抽样(按分布)
  • 最大最小 index(特殊值)

条件筛选

  • np.where

提取

注意:提取和唯一值返回的都是一维向量

  • 按条件提取 np.extract()
  • 另一种提取方式 np.unique()

抽样

  • np.random

最值

  • np.argmax/np.argmin
  • np.argsort

矩阵运算

  • 算术(四则运算及其他基础算术)
  • 广播
  • 矩阵相关

算术

  • 四则运算
  • 平方 arr**2
  • 开方 np.sqrt
  • 四舍五入 np.round
  • 区间最小 最大 floor cell
  • 余数 mod

广播

具体可以看其他详细资料

矩阵

注意:dotmatmul 在高维度时表现不同,与 dot 的主要区别是:如果维度 > 2,dot 只考虑最后的维度,而 matmul 则考虑所有维度

  • 乘法 dot(a,b) 或者a.dot(b) np.matmul(a,b) 或者 a@b
  • 点积 np.vdot 或者 np.sum(a*a)
  • 内积 np.inner(a,a) 或者a.dot(a,T)
  • 行列式 np.linalg.det()
  • 逆矩阵 np.linalg.inv()

以上就是总结啦!下次继续!!!