IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 打卡Datawhale31期Task01 -> 正文阅读

[数据结构与算法]打卡Datawhale31期Task01

Task1主要学习绪论概述 和 数学基础两个部分。
学习资料点这里

数学基础介绍了矩阵、矩阵的秩、矩阵的逆、广义逆以及矩阵的SVD和特征向量分解两种分解方式。

因为我目的在于提升代码能力,所以看完理论把其中一些内容用代码记录出来。
(用jupyternotebook导出md,然后导入体验不错hhhh)

import numpy as np

矩阵基本知识

1.随机数生成一个矩阵

#  生成【0,10)之间,4*4的矩阵  
A = np.random.randint(0,10,size = (4,4))
A

下面为输出A:

array([[5, 3, 0, 1],
       [0, 9, 4, 5],
       [7, 3, 8, 2],
       [3, 3, 2, 3]])
B = np.random.rand(2,4) # 随机数生成0-1之间矩阵
B

下面为输出B:

array([[0.99047078, 0.07596616, 0.667819  , 0.04907022],
       [0.64565844, 0.59305278, 0.90967228, 0.69274612]])

下面为输出C:

C = np.random.binomial(n = 10,p = 0.5,size=(4,4))  
C
# 服从二项分布的随机矩阵,n代表n次伯努利实验,p代表每次实验事件发生概率,返回值为发生次数
array([[6, 6, 7, 4],
       [5, 6, 6, 3],
       [6, 4, 6, 6],
       [4, 6, 3, 7]])

2.求矩阵的秩

np.linalg.matrix_rank(A)  # 求矩阵A的秩

输出:4

4

3.矩阵求逆

np.linalg.inv(A) # array类型,使用np.linalg.inv()。如果矩阵不可逆,会报错

输出为矩阵A的逆:

array([[ 0.51440329, -0.48148148,  0.25925926, -0.01234568],
       [-0.23868313,  0.40740741, -0.2962963 ,  0.0617284 ],
       [ 0.29218107, -0.48148148,  0.25925926,  0.32098765],
       [-0.218107  ,  0.14814815,  0.07407407, -0.09876543]])
# 也可以先将A 转化为矩阵,然后求逆
np.mat(A).I 

另一种方式,得到矩阵A的逆:

matrix([[ 0.51440329, -0.48148148,  0.25925926, -0.01234568],
        [-0.23868313,  0.40740741, -0.2962963 ,  0.0617284 ],
        [ 0.29218107, -0.48148148,  0.25925926,  0.32098765],
        [-0.218107  ,  0.14814815,  0.07407407, -0.09876543]])

4.求伪逆(广义逆)

np.linalg.pinv(B) # 如果B可逆,那么使用pinv与inv结果相同

输出伪逆:

array([[ 0.51440329, -0.48148148,  0.25925926, -0.01234568],
       [-0.23868313,  0.40740741, -0.2962963 ,  0.0617284 ],
       [ 0.29218107, -0.48148148,  0.25925926,  0.32098765],
       [-0.218107  ,  0.14814815,  0.07407407, -0.09876543]])

5.求矩阵的特征值和特征向量

value, vector = np.linalg.eig(A) # value为特征值,vector为特征向量
print(value)
print(vector)

输出特征值和特征向量:

[19.44501275+0.j         -3.14273158+4.92356561j -3.14273158-4.92356561j
 -5.1595496 +0.j        ]
[[-0.21622605+0.j          0.65565157+0.j          0.65565157-0.j
  -0.14138165+0.j        ]
 [-0.63512215+0.j         -0.20739702-0.41062277j -0.20739702+0.41062277j
  -0.56296376+0.j        ]
 [-0.52270244+0.j         -0.04817398-0.18804402j -0.04817398+0.18804402j
   0.81420911+0.j        ]
 [-0.52597368+0.j         -0.28748042+0.48802679j -0.28748042-0.48802679j
  -0.01210621+0.j        ]]

矩阵分解

1.矩阵特征分解

# 特征向量矩阵 * 特征值构成的对角阵 * 特征向量矩阵的逆
value, vector = np.linalg.eig(A) # value为特征值,vector为特征向量
sigma_matrix = np.diag(value) # np.diag将特征值 向量 转化为对角阵
print("特征值构成的对角阵",sigma_matrix)
# np.dot求矩阵乘法
np.allclose(A,np.dot(np.dot(vector , sigma_matrix) , np.linalg.inv(vector))) # 乘回去看下是否为原来的A
#np.allclose()比较两个array是不是每一元素都相等,默认在1e-05的误差范围内
特征值构成的对角阵 [[19.44501275+0.j          0.        +0.j          0.        +0.j
   0.        +0.j        ]
 [ 0.        +0.j         -3.14273158+4.92356561j  0.        +0.j
   0.        +0.j        ]
 [ 0.        +0.j          0.        +0.j         -3.14273158-4.92356561j
   0.        +0.j        ]
 [ 0.        +0.j          0.        +0.j          0.        +0.j
  -5.1595496 +0.j        ]]

True

2.奇异值分解

U,Sigma,V_h =  np.linalg.svd(A,full_matrices=True,compute_uv=True) # 正交矩阵U,奇异值Sigma,正交矩阵V
Sigma_matrix = np.diag(Sigma) # 将奇异值写成对角矩阵
print("奇异值为",Sigma)
print("奇异矩阵",Sigma_matrix)
奇异值为 [20.65300001  6.64383105  5.32940964  4.68086452]
奇异矩阵 [[20.65300001  0.          0.          0.        ]
 [ 0.          6.64383105  0.          0.        ]
 [ 0.          0.          5.32940964  0.        ]
 [ 0.          0.          0.          4.68086452]]
np.mean([1,2,3,4]) # 求向量均值
np.std([1,2,3,4]) # 向量标准差
# np.cov([1,2,3,4])
np.mean(A) # 矩阵均值 这里得到一个标量
np.std(A) # 矩阵标准差  这里得到一个标量
np.cov(A)# more每行为一个变量.如果rowvar =False则每列为一个变量

下面打印的为A的协方差,A的每行看做一个变量

array([[ 4.91666667, -2.83333333,  0.33333333,  0.75      ],
       [-2.83333333, 13.66666667, -7.        ,  0.16666667],
       [ 0.33333333, -7.        ,  8.66666667, -1.        ],
       [ 0.75      ,  0.16666667, -1.        ,  0.25      ]])

概率统计

  1. 二项分布和伯努利分布的关系
    二项分布和伯努利分布:二项分布即重复n次伯努利试验,各试验之间相互独立
  2. 全概率公式和贝叶斯公式
    在这里插入图片描述
    [图来自Datawhale学习资料,见顶部链接]

信息论

1.熵 Entropy越小,混乱程度小,不确定小,纯度高。
2.交叉熵用来求目标与预测值之间的差距,深度学习较常用

最小二乘估计

损失函数取 预测值与真实值差值的平方的和,最小化这个损失。

参考资料:
1.关于特征值分解和奇异值分解部分:特征值分解和奇异值分解 写的超清晰。
4. Datawhale学习资料

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-11-17 13:00:34  更:2021-11-17 13:01:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 10:48:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码