Chiriri's blog Chiriri's blog
首页
  • Java

    • JavaSE
    • JavaEE
    • 设计模式
  • Python

    • Python
    • Python模块
    • 机器学习
  • Golang

    • Golang
    • gRPC
  • 服务器

    • Linux
    • MySQL
    • NoSQL
    • Kubernetes
  • 项目

    • 传智健康
    • 畅购商城
  • Hadoop生态

    • Hadoop
    • Zookeeper
    • Hive
    • Flume
    • Kafka
    • Azkaban
    • Hbase
    • Scala
    • Spark
    • Flink
  • 大数据项目

    • 离线数仓
  • 青训营

    • 第四届青训营
  • HTML

    • HTML
    • JavaScript
  • Vue

    • Vue2
    • TypeScript
    • Vue3
    • Uni-APP
  • 数据结构与算法
  • C语言
  • 考研数据结构
  • 计算机组成原理
  • 计算机操作系统
  • Java基础

    • Java基础
    • Java集合
    • JUC
    • JVM
  • 框架

    • Spring
    • Dubbo
    • Spring Cloud
  • 数据库

    • MySQL
    • Redis
    • Elasticesearch
  • 消息队列

    • RabbitMQ
    • RocketMQ
  • 408

    • 计算机网络
    • 操作系统
    • 算法
  • 分类
  • 标签
  • 归档
  • 导航站
GitHub (opens new window)

Iekr

苦逼后端开发
首页
  • Java

    • JavaSE
    • JavaEE
    • 设计模式
  • Python

    • Python
    • Python模块
    • 机器学习
  • Golang

    • Golang
    • gRPC
  • 服务器

    • Linux
    • MySQL
    • NoSQL
    • Kubernetes
  • 项目

    • 传智健康
    • 畅购商城
  • Hadoop生态

    • Hadoop
    • Zookeeper
    • Hive
    • Flume
    • Kafka
    • Azkaban
    • Hbase
    • Scala
    • Spark
    • Flink
  • 大数据项目

    • 离线数仓
  • 青训营

    • 第四届青训营
  • HTML

    • HTML
    • JavaScript
  • Vue

    • Vue2
    • TypeScript
    • Vue3
    • Uni-APP
  • 数据结构与算法
  • C语言
  • 考研数据结构
  • 计算机组成原理
  • 计算机操作系统
  • Java基础

    • Java基础
    • Java集合
    • JUC
    • JVM
  • 框架

    • Spring
    • Dubbo
    • Spring Cloud
  • 数据库

    • MySQL
    • Redis
    • Elasticesearch
  • 消息队列

    • RabbitMQ
    • RocketMQ
  • 408

    • 计算机网络
    • 操作系统
    • 算法
  • 分类
  • 标签
  • 归档
  • 导航站
GitHub (opens new window)
  • JavaSE

  • JavaEE

  • Linux

  • MySQL

  • NoSQL

  • Python

  • Python模块

  • 机器学习

    • 机器学习
    • matplotlib
    • Numpy
      • 读取数据
      • 数组转ndarray
      • ndarray数组方法
      • ndarray数组生成方法
      • 数组的索引和切片
      • 形状修改
      • 数组拼接
      • 数组切分
      • 类型修改
      • 复制
      • 数组的去重
      • 数组运算
        • 判断函数
      • 排序
        • 统计运算
      • 正态分布
      • 矩阵
        • 向量
        • 加法和标量乘法
        • 矩阵乘法的性质
        • 逆、转置
        • 转置
        • np方法
    • Pandas
  • 设计模式

  • 传智健康

  • 畅购商城

  • 博客项目

  • JVM

  • JUC

  • Golang

  • Kubernetes

  • 硅谷课堂

  • C

  • 源码

  • 神领物流

  • RocketMQ

  • 短链平台

  • 后端
  • 机器学习
Iekr
2021-11-02
目录

Numpy

# Numpy

开源的 python 科学计算库 用于快速处理任意维度的数组 npmpy 中存储对象是 ndarray

优势:

  1. 内容块风格
  2. 支持并行化运算
  3. 效率高于纯 python
  4. 底层使用了 C, 内部释放了 GIL
  • np.array ([]) 创建 np 数组 返回 ndarray 对象

# 读取数据

np.genfromtxt("xxx.txt",delimiter=",",dtype=str) # 从txt中读取数据
1

# 数组转 ndarray

将数组或者多维数组转为 np 数组

np.arryay([5,10,15,1])
ndarray = np.arryay([[5,10,15,1],[15,2,5,3]])
1
2
  • 列表中元素会自动转换为同一类 一般全部统一为一个类型
  • 每个元素内 元素数必须相同

# ndarray 数组方法

  • ndarray.shape 数组维度和维度元素个数的元组
  • ndarray.ndim 数组维数
  • ndarray.size 数组中全部的元素数量
  • ndarray.itemsize 一个数组元素的长度 (字节)
  • ndarray.floor () 将数组中元素向上取整
  • ndarray.dtype 数组元素的类型
    • image-20211102163311444

# ndarray 数组生成方法

  • np.arange (15,30,5) 创建等差数组 生成一个 np 数组从 15 到 30 步进为 5 个 默认为 1 维
  • p.logspace (start,stop, num) 创建等比数列 默认生成 50 个 num p.logspace (0,2, 3) 从 10 的 0 次方到 10 的 2 次方 生成 3 个元素 默认为 50 个
  • np.zeros ((3,4)) 生成一个全为 0 的 np 数组 3 行 4 列
  • np.zeros_like (a, dtype) 复制当前数组的维度和行列数 生成一个全为 0 的数组
  • np.ones ((2,3,4), dtype=np.int32) 生成全为一的数组 二维三行 4 列 默认为 float64 类型 zeros 也是
  • np.ones_like (a, dtype) 复制当前数组的维度和行列数 生成一个全为 1 的数组
  • np.random.random ((2,3)) 多少个 random 就是多维 生成一个两行三列的数组 取值为 (-1,1)
  • np.linspace (0,5,100) 生成一个 0-5 之间平均取 100 个值

# 数组的索引和切片

  • ndarray [s,r] 根据维度和索引 获取值
  • ndarray [0:] 支持切片

# 形状修改

  • ndarray.reshape (shape, order) 将原数组 转为为指定的行列

    • stock_change = np.random.normal(0, 1, (8, 10))
      stock_change.reshape([10,8])  #将行列互换了  reshape方法并不会修改元素的个数和产生新的元素
      stock_change.reshape([-1,2])  #如果不知道具体的行或列可以使用-1代替 自动计算   如这里的 不知道多少行 每个行2个数据
      #一定要整除 否则报错
      
      1
      2
      3
      4
  • ndarray.resize (new_shape) reshape 并不会对原数组进行修改 而产生新数组 我们使用 resize 可以对原数组进行修改

  • ndarray.revel () 将数组变成一维 将全部元素存放为数组中

  • ndarray.T 将数组的行、列进行互换

# 数组拼接

  • np.hstack ((a,b)) 将两数组相连接
  • np.vstack ((a,b)) 将两数组纵向拼接

# 数组切分

  • np.hshplit (a,3) 将指定数组平均拆分成 3 个 np 数组 行的拆分 列数不变
  • np.hshplit (a,(3,4)) 如果传递元组则在指定索引下 拆分 在第 3 列拆分 1 个 在第 4 列拆分 1 个 其他拆分为 1 个
  • np.vshplit (a,3) 列拆分 行不变
  • np.hshplit (a,(3,4)) 在指定列数拆分

# 类型修改

  • ndarray.astype (flaot) 转换元素类型

    • df['金牌数'] = df['金牌数'].fillna("0").astype(int) #先替换缺失值
      
      1
  • ndarray.tostring ([order]) 转为字符串输出

  • ndarray.tobytes ([order]) 转为字节数组

# 复制

  • np.array (object, dtype) 将数组转为 np 数组 深拷贝
  • np.asarray (a, dtype) 浅拷贝
  • ndarray.copy () 浅拷贝
  • ndarray.view () 深拷贝

# 数组的去重

  • np.unique (nparray) 去重

# 数组运算

  • np 数组支持两个 np 数组 之间运算 同时支持与常数运算

    • a = np.array([20,30,40,50])
      b = np.array([1,2,3])
      #数组在进行矢量化运算时,要求数组的形状是相等的。当形状不相等的数组执行算术运算的时候,就会出现广播机制,该机制会对数组进行扩展,使数组的shape属性值一样,这样,就可以进行矢量化运算了。
      a + b # [21,32,43,50]
      a - 1 # [19,29,39,49]
      a * 2 # [40,60,80,100]
      
      1
      2
      3
      4
      5
      6
  • ndarray == 10 支持 > = < 比较运算符 返回为同样维度的布尔数组

    • na = np.arryay([5,10,15,1])
      t = na == 10
      print (na[t])  #因为返回是布尔数组 所以可以根据索引获取具体值
      print (na[na == 10])
      
      1
      2
      3
      4
  • 支持 逻辑运算

    • na = np.arryay([5,10,15,1])
      t = (na >= 10) && (na <= 5)
      
      1
      2
  • np.exp () 平方

  • np.sqrt () 开根号

  • np.tile (a,(2,2)) 将行数和列数扩展为指定倍数 传递数组和一个元组

# 判断函数

  • np.all () 所有元素都符合条件则返回 true np.all (arry>60 )
  • np.any () 有一个符合则返回 true
  • np.where (temp> 60, 1, 0) 三元运算符 成立返回参数 2 否则返回参数 3
  • ndarray.argmax (axis=) 返回最大值的索引

# 排序

  • ndarray.sort (axis=) 排序默认为升序
  • ndarray.argsort (axis=) 按元素排序 返回元素之前的索引

# 统计运算

  • ndarray.min (axis) 获取最小值

  • ndarray.max (axis) 获取最大值

  • ndarray.sum (axis=1) 求和 axis=1 则为行求和 axis=0 为列切换

  • ndarray.median (axis) 返回中位值

  • ndarray.mean (axis,dtype) 返回平均值

  • ndarray.std (axis,dtype) 返回标准差

  • ndarray.var (axis,dtype) 返回方差

# 正态分布

正态分布是一种概率分布。正态分布是具有两个参数 μ 和 σ 的连续型随机变量的分布,第一参数 μ 是服从正态分布的随机变量的均值,第二个参 数 σ 是此随机变量的标准差,所以正态分布记作 N (μ,σ)。

# 矩阵

矩阵必须是二维的 但 array 可以是多维的

A={abcdefghijklmnopqrst}

# 向量

向量是一种特殊的矩阵 向量一般都是列向量

如: (3x1) 的矩阵

向量是一维的

# 加法和标量乘法

  • 加法:行列数相等时可以相加

  • 乘法:标 (常) 量 乘以 矩阵 直接相乘 按原来位置

  • 矩阵向量乘法: (M 行,N 列) X (N 行,L 列) = (M 行,L 列) 并且 N 列和 N 行相等

image-20210909210108515

  • 矩阵乘法:image-20211020083948346

即 A 的第一行 各个数 都乘以 B 的第一列各个数 相加 得到 C 的第一行第一个数

​ 第一行 各个数 都乘以 B 的第二列各个数 相加 得到 C 的第一行第二个数

# 矩阵乘法的性质

  • 矩阵乘法不满足交换律 A*B != B*A
  • 矩阵的乘法满足结合律: A*(B*C)=(A*B)*C
  • 单位矩阵:在矩阵乘法中 有一种特殊矩阵 称为单位矩阵 它是个方针 一般用 I 或者 E 表示 从左上角到右下角的对角线 (称为主对角线) 上的元素均为为 1 其他全为 0 如果 A*B=E 那么矩阵 A 和 B 互为逆矩阵

image-20211020091909782

# 逆、转置

  1. 待定系数法

给予一个 2X2 的矩阵 我们假设一个同样为 2X2 的矩阵 [a b] [b c]

A B 矩阵相乘 转为单位矩阵

3阶以内的矩阵求逆矩阵的3种手算方法

3阶以内的矩阵求逆矩阵的3种手算方法

求出 a b c d 的值,就可以得出 A 的逆矩阵

3阶以内的矩阵求逆矩阵的3种手算方法

  1. 伴随矩阵求逆矩阵
  • 伴随矩阵是矩阵元素所对应的代数余子式,所构成的矩阵,转置后得到的新矩阵。

3阶以内的矩阵求逆矩阵的3种手算方法

原矩阵为 [1 2]

​ [-1 -3]

A11 为 第一行和第一列的元素 都去掉剩下 -3 又因为 A11 为 1+1=2 为偶数是整数 1*-3=-3 A11=-3

A12 为 第一行和第二列的元素 都去掉剩下 -1 又因为 A12 为 1+2=3 为奇数 所以为负号 A12=-(-1)=1

A21 为 第二行和第一列的元素 都去掉剩下 2 2+1 为奇数 A21=-(2)=-2

A22 为 第二行和第二列的元素 都去掉剩下 1 为偶数 A22=1

得出 [-3 1] 的矩阵 进行转置即行列变换第一行内容变成第一列内容 变成 [-3 -2]

​ [-2 1] 第二行内容变成第二列内容 [1 1]

接下来求出矩阵 A 的行列式

  • 行列式

二阶行列式的计算方法是 “对角线法则” 主对角线元素积与副对角线元素积的差

img

二阶行列式并不适合三阶使用

正对角线为正,反对角线为负。

img

xsc + yt*a + ra* z - zsa - yr*c - tb* x

由行列号性质得出

|A|1*(-1)-(-1)*2=-1

A⁻¹=A*/|A| = A*/(-1)=-A* = [3 2]

​ [-1 -1]

  1. 初等变换求逆矩阵

首先我们得出 A 的增广矩阵

3阶以内的矩阵求逆矩阵的3种手算方法

然后进行初等行变换。依次进行

第 1 行加到第 2 行,得到

第 2 行 ×2 加到第 1 行,得到

第 2 行 ×(-1),得到

3阶以内的矩阵求逆矩阵的3种手算方法

因此逆矩阵 A⁻¹=

3 2

-1 -1

3阶以内的矩阵求逆矩阵的3种手算方法

# 转置

即将矩阵的行列互换

# np 方法

  • np.matmul()

    • a = np.array([[80, 86], [82, 80], [85, 78], [90, 90],
                   [86, 82], [82, 90]])  # 是的多行2列的矩阵
      b = np.array([[0.7], [0.3]])  # 两行一列的矩阵
      np.matmul(a, b)  # 转为M行L列 即多行一列
      
      1
      2
      3
      4
  • np.dot()

    • #np.matmul(a, 10) #只支持矩阵相乘
      np.dot(a, 10)  # matmul和dot功能一致 但dot支持点乘  标量运算 matmul不支持点乘
      
      1
      2
编辑 (opens new window)
上次更新: 2023/12/06, 01:31:48
matplotlib
Pandas

← matplotlib Pandas→

最近更新
01
k8s
06-06
02
进程与线程
03-04
03
计算机操作系统概述
02-26
更多文章>
Theme by Vdoing | Copyright © 2022-2025 Iekr | Blog
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式