【机器学习】在向量的流光中,揽数理星河为衣,以线性代数为钥,轻启机器学习黎明的瑰丽诗章

文章目录

  • 线性代数入门:机器学习零基础小白指南
    • 前言
    • 一、向量:数据的基本单元
      • 1.1 什么是向量?
        • 1.1.1 举个例子:
      • 1.2 向量的表示与维度
        • 1.2.1 向量的维度
        • 1.2.2 向量的表示方法
      • 1.3 向量的基本运算
        • 1.3.1 向量加法
        • 1.3.2 向量的数乘
        • 1.3.3 向量的长度(范数)
      • 1.4 向量的几何意义
    • 二、矩阵:多维数据的集合
      • 2.1 什么是矩阵?
        • 2.1.1 举个例子:
      • 2.2 矩阵的表示与维度
        • 2.2.1 矩阵的表示
        • 2.2.2 矩阵的维度
      • 2.3 矩阵的基本运算
        • 2.3.1 矩阵加法
        • 2.3.2 矩阵数乘
        • 2.3.3 矩阵乘法
        • 2.3.4 转置矩阵
    • 三、矩阵的高级操作
      • 3.1 矩阵的逆
        • 3.1.1 什么是逆矩阵?
        • 3.1.2 矩阵可逆的条件
        • 3.1.3 逆矩阵的计算
      • 3.2 特征值与特征向量
        • 3.2.1 什么是特征值和特征向量?
        • 3.2.2 几何意义
        • 3.2.3 计算特征值和特征向量
      • 3.3 奇异值分解(SVD)
        • 3.3.1 什么是奇异值分解?
        • 3.3.2 SVD的用途
      • 3.4 矩阵的伪逆
        • 3.4.1 什么是伪逆?
        • 3.4.2 伪逆的计算方法
    • 四、矩阵在机器学习中的应用
      • 4.1 数据表示
      • 4.2 模型训练中的矩阵运算
        • 4.2.1 线性回归
  • 写在最后

线性代数入门:机器学习零基础小白指南

💬 欢迎讨论:如果你在阅读过程中对某些公式或内容有疑问,欢迎在评论区留言,大家一起交流进步!

👍 点赞、收藏与分享:觉得这篇文章对你有帮助吗?记得点赞收藏,并分享给对机器学习感兴趣的朋友吧!你们的支持是我创作的最大动力!

🚀 知识的启航:线性代数是机器学习的基础,也是未来探索智能模型的关键。让我们从这里开始,一步步搭建知识大厦!


前言

在正式踏入机器学习的实战领域前,我们需要为自己筑起一座坚实的数学地基。 对于零基础的学习者而言,数学听起来也许陌生甚至有点“吓人”。然而,不必惧怕:本篇文章将带你从最直观的概念出发,帮助你理解和掌握线性代数这门支撑机器学习大厦的重要支柱。

为什么选择线性代数作为第一站?

  • 数据表示:机器学习中的数据常以矩阵和向量的形式表示,线性代数是理解这种数据结构的语言。
  • 模型构建:许多经典模型(如线性回归)和高级算法(如神经网络中的参数更新)都依赖矩阵运算和向量运算的思想。
  • 特征变换:降维、特征提取、特征工程等处理步骤都离不开对线性代数的理解。

本篇文章将采用从浅入深的方式,带你从最基本的概念(向量与矩阵)出发,逐步触及更深层的运算与应用。你不需要担心自己的数学基础薄弱,每一个概念都会配以直观解释、示例和适合初学者的类比。通过本篇的学习,你将在脑海中构建起对数据表示和线性结构的基础认知,为后续的学习奠定牢固根基。


一、向量:数据的基本单元

1.1 什么是向量?

向量(Vector)是线性代数的核心概念之一。简单来说,向量是一组有序数值的集合,可以用来表示一个物理量或者一个对象的特征。

1.1.1 举个例子:

假设我们想描述一个人的体型,可以用以下信息:

  • 身高:170 厘米
  • 体重:65 公斤
  • 年龄:30 岁

我们可以把这些特征组合成一个向量:
v = [ 170 65 30 ] \mathbf{v} = \begin{bmatrix} 170 \\ 65 \\ 30 \end{bmatrix} v= 1706530


1.2 向量的表示与维度

1.2.1 向量的维度

向量的维度(Dimension)是其元素的个数。例如:

  • v = [ 170 65 30 ] \mathbf{v} = \begin{bmatrix} 170 \\ 65 \\ 30 \end{bmatrix} v= 1706530 是一个三维向量。
  • w = [ 1 2 ] \mathbf{w} = \begin{bmatrix} 1 \\ 2 \end{bmatrix} w=[12] 是一个二维向量。
1.2.2 向量的表示方法
  1. 数学表示:用列向量或行向量表示,例如:

    • 列向量:
      v = [ v 1 v 2 v 3 ] \mathbf{v} = \begin{bmatrix} v_1 \\ v_2 \\ v_3 \end{bmatrix} v= v1v2v3
    • 行向量:
      v = [ v 1 v 2 v 3 ] \mathbf{v} = \begin{bmatrix} v_1 & v_2 & v_3 \end{bmatrix} v=[v1v2v3]
  2. 编程实现(以 Python 为例):

    import numpy as np# 创建列向量
    v = np.array([[170], [65], [30]])
    print(v)# 创建行向量
    w = np.array([1, 2, 3])
    print(w)
    

1.3 向量的基本运算

向量运算是线性代数的基础,在机器学习中用于描述数据间的关系。

1.3.1 向量加法

两个维度相同的向量可以逐元素相加。例如:
a = [ 1 2 ] , b = [ 3 4 ] \mathbf{a} = \begin{bmatrix} 1 \\ 2 \end{bmatrix}, \quad \mathbf{b} = \begin{bmatrix} 3 \\ 4 \end{bmatrix} a=[12],b=[34]
它们的加法结果为:
a + b = [ 1 + 3 2 + 4 ] = [ 4 6 ] \mathbf{a} + \mathbf{b} = \begin{bmatrix} 1+3 \\ 2+4 \end{bmatrix} = \begin{bmatrix} 4 \\ 6 \end{bmatrix} a+b=[1+32+4]=[46]

Python代码:

import numpy as npa = np.array([1, 2])
b = np.array([3, 4])
print(a + b)  # 输出:[4 6]

1.3.2 向量的数乘

标量 (c) 与向量 v \mathbf{v} v 的乘积是将 (c) 逐一乘以向量中的每个元素:
c v = [ c ⋅ v 1 c ⋅ v 2 ] c \mathbf{v} = \begin{bmatrix} c \cdot v_1 \\ c \cdot v_2 \end{bmatrix} cv=[cv1cv2]

例如:
2 ⋅ [ 3 4 ] = [ 6 8 ] 2 \cdot \begin{bmatrix} 3 \\ 4 \end{bmatrix} = \begin{bmatrix} 6 \\ 8 \end{bmatrix} 2[34]=[68]

Python代码:

v = np.array([3, 4])
c = 2
print(c * v)  # 输出:[6 8]

1.3.3 向量的长度(范数)

向量的长度,也称范数(Norm),定义为:
∥ v ∥ = v 1 2 + v 2 2 + ⋯ + v n 2 \|\mathbf{v}\| = \sqrt{v_1^2 + v_2^2 + \cdots + v_n^2} v=v12+v22++vn2

示例
v = [ 3 4 ] \mathbf{v} = \begin{bmatrix} 3 \\ 4 \end{bmatrix} v=[34],则:
∥ v ∥ = 3 2 + 4 2 = 5 \|\mathbf{v}\| = \sqrt{3^2 + 4^2} = 5 v=32+42 =5

Python代码:

from numpy.linalg import normv = np.array([3, 4])
print(norm(v))  # 输出:5.0

1.4 向量的几何意义

向量可以用来描述“方向”和“大小”。例如:

  • 向量 v = [ 3 4 ] \mathbf{v} = \begin{bmatrix} 3 \\ 4 \end{bmatrix} v=[34] 指向二维平面中的点 ((3,4)),其长度为 5。

二、矩阵:多维数据的集合

2.1 什么是矩阵?

矩阵(Matrix)是一个二维数组,由行(Row)和列(Column)组成。矩阵在机器学习中非常重要,用于表示数据集、模型参数和特征变换。

2.1.1 举个例子:

假设我们有一个房价预测的数据集,包括以下信息:

面积(平方米)房龄(年)房价(万元)
505100
10010200
1508300

可以将这个数据用矩阵表示:

  • 特征矩阵 (X):
    X = [ 50 5 100 10 150 8 ] X = \begin{bmatrix} 50 & 5 \\ 100 & 10 \\ 150 & 8 \end{bmatrix} X= 501001505108

  • 目标向量 (y):
    y = [ 100 200 300 ] y = \begin{bmatrix} 100 \\ 200 \\ 300 \end{bmatrix} y= 100200300


2.2 矩阵的表示与维度

2.2.1 矩阵的表示

矩阵通常用大写字母(如 (A), (X))表示,矩阵中的元素可以用行列索引 (A_{ij}) 表示,例如:
A = [ 1 2 3 4 5 6 ] A = \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \end{bmatrix} A=[142536]

  • A 11 = 1 A_{11} = 1 A11=1 表示第一行第一列的元素。
  • A 23 = 6 A_{23} = 6 A23=6 表示第二行第三列的元素。
2.2.2 矩阵的维度

矩阵的维度用“行数 × 列数”表示,例如:

  • 上述矩阵 (A) 的维度是 2 × 3 2 \times 3 2×3(2 行 3 列)。
  • 如果一个矩阵的行数和列数相同,则称其为方阵

Python代码实现:

import numpy as np# 创建矩阵
A = np.array([[1, 2, 3],[4, 5, 6]])
print("矩阵 A:\n", A)
print("A 的形状:", A.shape)  # 输出 (2, 3)

2.3 矩阵的基本运算

2.3.1 矩阵加法

两个矩阵相加要求维度相同,逐元素相加。例如:
[ 1 2 3 4 ] + [ 5 6 7 8 ] = [ 6 8 10 12 ] \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix} + \begin{bmatrix} 5 & 6 \\ 7 & 8 \end{bmatrix} =\begin{bmatrix} 6 & 8 \\ 10 & 12 \end{bmatrix} [1324]+[5768]=[610812]

Python代码:

A = np.array([[1, 2],[3, 4]])
B = np.array([[5, 6],[7, 8]])
print(A + B)  # 输出 [[6, 8], [10, 12]]

2.3.2 矩阵数乘

标量(普通数值)与矩阵相乘是将标量逐元素乘以矩阵中的每个元素。例如:
2 ⋅ [ 1 2 3 4 ] = [ 2 4 6 8 ] 2 \cdot \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix} =\begin{bmatrix} 2 & 4 \\ 6 & 8 \end{bmatrix} 2[1324]=[2648]

Python代码:

A = np.array([[1, 2],[3, 4]])
print(2 * A)  # 输出 [[2, 4], [6, 8]]

2.3.3 矩阵乘法

矩阵乘法是矩阵运算中最常见的操作,用于特征变换和模型训练。

规则

  • 如果 A A A m × n m \times n m×n 的矩阵, B B B n × p n \times p n×p 的矩阵,则它们的乘积 C = A B C = AB C=AB m × p m \times p m×p 的矩阵。
  • 元素 C i j C_{ij} Cij 的计算公式为:
    C i j = ∑ k = 1 n A i k B k j C_{ij} = \sum_{k=1}^n A_{ik} B_{kj} Cij=k=1nAikBkj

示例
A = [ 1 2 3 4 ] , B = [ 5 6 7 8 ] A = \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix}, \quad B = \begin{bmatrix} 5 & 6 \\ 7 & 8 \end{bmatrix} A=[1324],B=[5768]

矩阵乘积:
C = A ⋅ B = [ 19 22 43 50 ] C = A \cdot B = \begin{bmatrix} 19 & 22 \\ 43 & 50 \end{bmatrix} C=AB=[19432250]

Python代码:

A = np.array([[1, 2],[3, 4]])
B = np.array([[5, 6],[7, 8]])
C = A.dot(B)  # 或使用 np.matmul(A, B)
print(C)  # 输出 [[19, 22], [43, 50]]

2.3.4 转置矩阵

矩阵的转置是将其行列互换。例如:
A = [ 1 2 3 4 5 6 ] A = \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \end{bmatrix} A=[142536]
其转置为:
A T = [ 1 4 2 5 3 6 ] A^T = \begin{bmatrix} 1 & 4 \\ 2 & 5 \\ 3 & 6 \end{bmatrix} AT= 123456

Python代码:

A = np.array([[1, 2, 3],[4, 5, 6]])
print(A.T)  # 输出 [[1, 4], [2, 5], [3, 6]]

三、矩阵的高级操作

矩阵的高级操作是线性代数的重要内容,也是机器学习中不可或缺的数学工具。在这一部分,我们将学习矩阵的逆、特征值、特征向量以及矩阵分解等内容,并结合实际应用来理解它们的意义。


3.1 矩阵的逆

3.1.1 什么是逆矩阵?

对于一个方阵 (A),如果存在一个矩阵 A − 1 A^{-1} A1,使得:
A ⋅ A − 1 = A − 1 ⋅ A = I A \cdot A^{-1} = A^{-1} \cdot A = I AA1=A1A=I
其中 I I I 是单位矩阵(对角线元素为 1,其他为 0 的矩阵),则称 A − 1 A^{-1} A1 A A A 的逆矩阵。

3.1.2 矩阵可逆的条件
  • 只有方阵(行数等于列数)可能有逆矩阵。
  • 如果矩阵的行列式(Determinant)为 0,则该矩阵不可逆(奇异矩阵)。
3.1.3 逆矩阵的计算

对于 2 × 2 2 \times 2 2×2 的矩阵 A = [ a b c d ] A = \begin{bmatrix} a & b \\ c & d \end{bmatrix} A=[acbd],其逆矩阵为:
A − 1 = 1 a d − b c [ d − b − c a ] A^{-1} = \frac{1}{ad - bc} \begin{bmatrix} d & -b \\ -c & a \end{bmatrix} A1=adbc1[dcba]

例如:
A = [ 4 7 2 6 ] A = \begin{bmatrix} 4 & 7 \\ 2 & 6 \end{bmatrix} A=[4276]
行列式 a d − b c = 4 ⋅ 6 − 7 ⋅ 2 = 10 ad - bc = 4 \cdot 6 - 7 \cdot 2 = 10 adbc=4672=10

因此:
A − 1 = 1 10 [ 6 − 7 − 2 4 ] = [ 0.6 − 0.7 − 0.2 0.4 ] A^{-1} = \frac{1}{10} \begin{bmatrix} 6 & -7 \\ -2 & 4 \end{bmatrix} = \begin{bmatrix} 0.6 & -0.7 \\ -0.2 & 0.4 \end{bmatrix} A1=101[6274]=[0.60.20.70.4]

Python代码:

import numpy as np# 定义矩阵
A = np.array([[4, 7],[2, 6]])# 计算逆矩阵
A_inv = np.linalg.inv(A)
print("逆矩阵:\n", A_inv)

3.2 特征值与特征向量

3.2.1 什么是特征值和特征向量?

对于一个方阵 A A A,如果存在一个标量 λ \lambda λ 和一个非零向量 v \mathbf{v} v,使得:
A v = λ v A \mathbf{v} = \lambda \mathbf{v} Av=λv
则称:

  • λ \lambda λ 为矩阵 A A A 的特征值。
  • v \mathbf{v} v 为对应的特征向量。
3.2.2 几何意义

特征向量是一个方向,在矩阵变换下保持方向不变;特征值是对应的缩放因子。

3.2.3 计算特征值和特征向量

特征值通过解以下特征方程获得:
det ⁡ ( A − λ I ) = 0 \det(A - \lambda I) = 0 det(AλI)=0
解得的 λ \lambda λ 为特征值,将特征值代入方程 ( A − λ I ) v = 0 (A - \lambda I)\mathbf{v} = 0 (AλI)v=0 可解得特征向量。

Python代码:

from numpy.linalg import eig# 定义矩阵
A = np.array([[4, 1],[2, 3]])# 计算特征值和特征向量
values, vectors = eig(A)
print("特征值:\n", values)
print("特征向量:\n", vectors)

3.3 奇异值分解(SVD)

3.3.1 什么是奇异值分解?

奇异值分解(Singular Value Decomposition, SVD)是对矩阵的一种分解方法,可以表示为:
A = U Σ V T A = U \Sigma V^T A=UΣVT

3.3.2 SVD的用途
  • 数据降维:通过保留主要的奇异值,可以减少数据维度(如 PCA)。
  • 数据压缩:SVD可用于压缩图片或文本数据。
  • 推荐系统:通过矩阵分解预测用户评分。

Python代码:

from numpy.linalg import svd# 定义矩阵
A = np.array([[1, 2],[3, 4],[5, 6]])# 奇异值分解
U, Sigma, VT = svd(A)
print("U 矩阵:\n", U)
print("奇异值:\n", Sigma)
print("V 转置:\n", VT)

3.4 矩阵的伪逆

3.4.1 什么是伪逆?

伪逆矩阵(Pseudo-Inverse)是逆矩阵的推广,用于处理非方阵或奇异矩阵。对于一个矩阵 A A A,伪逆记为 A + A^+ A+

3.4.2 伪逆的计算方法

伪逆可以通过 SVD 计算:
A + = V Σ + U T A^+ = V \Sigma^+ U^T A+=VΣ+UT
其中 Σ + \Sigma^+ Σ+ 是对奇异值矩阵的伪逆。

Python代码:

# 定义矩阵
A = np.array([[1, 2],[3, 4],[5, 6]])# 计算伪逆
A_pinv = np.linalg.pinv(A)
print("伪逆矩阵:\n", A_pinv)

四、矩阵在机器学习中的应用

4.1 数据表示

  • 特征矩阵:存储样本的特征数据,每一行表示一个样本,每一列表示一个特征。
  • 目标向量:存储样本对应的目标值。

4.2 模型训练中的矩阵运算

4.2.1 线性回归

在线性回归中,我们希望找到参数向量 θ \theta θ,使得:
y = X θ y = X\theta y=
通过最小化误差:
min ⁡ θ ∥ X θ − y ∥ 2 \min_\theta \|X\theta - y\|^2 θminy2
可以使用正规方程求解:
θ = ( X T X ) − 1 X T y \theta = (X^T X)^{-1} X^T y θ=(XTX)1XTy

Python代码:

# 定义特征矩阵 X 和目标向量 y
X = np.array([[1, 50],[1, 100],[1, 150]])
y = np.array([100, 200, 300])# 计算参数向量 theta
theta = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y)
print("参数向量 theta:", theta)

写在最后

通过这篇文章的学习,你初步了解了向量和矩阵这些基础概念,以及它们在机器学习中的重要性。从简单的向量加减和数乘,到稍微复杂的矩阵运算,再到特征值、奇异值分解等高级知识点,这些都是构建更高级模型和理解算法原理的关键砖瓦。

你或许会发现,这些数学内容并不是遥不可及的高门槛,相反,它们能帮助你更直观地理解数据与模型之间的关系。接下来,你可以尝试把这里学到的知识灵活运用到一些简单数据分析或小项目中,比如实现一个最基础的线性回归预测,或者对一个数据集进行简单的降维操作。

在后续的学习中,我们还会介绍更多与机器学习相关的数学和编程技巧。希望这篇文章能成为你打牢数学基础的起点,让你在机器学习这片广阔的领域中更有方向感和掌控力。加油!


以上就是关于【机器学习】窥数据之序,悟算法之道:机器学习的初心与远方的内容啦,各位大佬有什么问题欢迎在评论区指正,或者私信我也是可以的啦,您的支持是我创作的最大动力!❤️

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/889408.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot——分层解耦、IOC、依赖注入

三层架构 如下图&#xff0c;创建Dao的接口以及该接口的实现类&#xff0c;Service也一样 Dao // Dao接口 public interface UserDao {public List<String> findAll(); }// Dao接口的实现 public class UserDaoImpl implements UserDao {// 加载用户数据Overridepublic …

【数据结构——栈和队列】括号配对(头歌实践教学平台习题)【合集】

目录&#x1f60b; 任务描述 相关知识 测试说明 我的通关代码: 测试结果&#xff1a; 任务描述 本关任务&#xff1a;编写一个程序利用栈判断左、右圆括号是否配对。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;栈对括号的处理。 栈对括号的处理 &…

企业级日志分析系统ELK之ELK概述

ELK 概述 ELK 介绍 什么是 ELK 早期IT架构中的系统和应用的日志分散在不同的主机和文件&#xff0c;如果应用出现问题&#xff0c;开发和运维人员想排 查原因&#xff0c;就要先找到相应的主机上的日志文件再进行查找和分析&#xff0c;所以非常不方便&#xff0c;而且还涉及…

pyqt+ubuntu18.04+designer+测试是否安装成功

引用&#xff1a; Ubuntu Linux安装PyQt5并配置Qt Designer 在Visual Studio Code中使用PyQt5开发python GUI应用程序 Linux环境下在Vscode中安装和设置PyQt5插件 其中&#xff0c; 测试是否安装成功 1、设置好之后在vscode编辑器的左侧文件目录栏空白位置右键&#xff0…

torchaudio.load 段错误

使用 torchaudio.load 时出现崩溃&#xff0c;如图 解决&#xff1a; 安装 ffmpeg ​conda install ffmpeg -c conda-forge 尝试但没解决问题的方法包括 重装 cuda&#xff0c;重装 pytorch&#xff0c;安装 PySoundFile、SoundFile、sox。

React 第十六节 useCallback 使用详解注意事项

useCallback 概述 1、useCallback 是在React 中多次渲染缓存函数的 Hook&#xff0c;返回一个函数的 memoized的值&#xff1b; 2、如果多次传入的依赖项不变&#xff0c;那么多次定义的时候&#xff0c;返回的值是相同的,防止频繁触发更新&#xff1b; 3、多应用在 父组件为函…

Chrome webdriver下载-避坑

WebDriver以原生的方式驱动浏览器&#xff0c;不需要调整环境变量。 一、window版 1.chrome和chromedriver下载地址&#xff1a; Chrome for Testing availability 我下载的是如下两个安装包&#xff0c;解压即可。 2.导包 pip install selenium然后用python代码引用即可…

PyQt事件机制练习

一、思维导图 二、代码 import sysfrom PyQt6.QtTextToSpeech import QTextToSpeech from PyQt6.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QLineEdit from PyQt6 import uic from PyQt6.QtCore import Qt, QTimerEvent, QTimeclass MyWidget(QWidget):d…

【Rive】Android与Rive交互

1 Android与Rive交互的常用接口 1.1 RiveAnimationView参数 <app.rive.runtime.kotlin.RiveAnimationViewandroid:id"id/rive_view"android:layout_width"match_parent"android:layout_height"match_parent"android:adjustViewBounds"…

Maven、mybatis框架

一、Maven介绍 1.概念&#xff1a; Maven项目对象模型(POM)&#xff0c;可以通过一小段描述信息来管理项目的构建&#xff0c;报告和文档的项目管理工具软件。 2.为啥使用maven: 之前项目中需要引入大量的jar包。这些jar从网上下载&#xff0c;可能下载地址不同意。这些jar之间…

使用 Python 爬取某网站简历模板(bs4/lxml+协程)

使用 Python 爬取站长素材简历模板 简介 在本教程中&#xff0c;我们将学习如何使用 Python 来爬取站长素材网站上的简历模板。我们将使用requests和BeautifulSoup库来发送 HTTP 请求和解析 HTML 页面。本教程将分为两个部分&#xff1a;第一部分是使用BeautifulSoup的方法&am…

HCIA-Access V2.5_2_2网络通信基础_TCP/IP协议栈报文封装

TCP/IP协议栈的封装过程 用户从应用层发出数据先会交给传输层&#xff0c;传输层会添加TCP或者UDP头部&#xff0c;然后交给网络层&#xff0c;网络层会添加IP头部&#xff0c;然后交给数据链路层&#xff0c;数据链路层会添加以太网头部和以太网尾部&#xff0c;最后变成01这样…

数据湖治理最佳实践

如果没有最佳实践&#xff0c;存储可能会变得无法维护。自动化数据质量、生命周期和隐私功能可持续清理/移动数据湖中的数据。数据湖正成为企业从大数据中提取价值的一种日益可行的解决方案&#xff0c;对于早期采用者和新用户来说都是合理的下一步。在独立的逻辑区域中随时可用…

ssd202d-badblock-坏块检测

这边文章讲述的是坏快检测功能 思路&#xff1a; 1.第一次烧录固件会实现跳坏块&#xff0c;但是后续使用会导致坏块的产生&#xff1b; 于是我在uboot环境变量添加了两个变量来控制坏快 lb_badnum //坏块个数 lb_badoff //坏块所在位置 2.第一次开机会根据lb_badnum是否…

鸿蒙ArkTS如何实现数据可视化:饼状图/柱状图/折线图

鸿蒙数据可视化系列 在我们鸿蒙APP开发中&#xff0c;经常需要使用到一些图表的开发&#xff0c;本文主要介绍使用 McCharts 框架绘制柱状图的方法 配套指导视频地址&#xff1a;鸿蒙数据可视化系列-McCharts使用介绍_哔哩哔哩_bilibili 1. 第三方库介绍 1.1. McCharts Mc…

unity打包sdk热更新笔记

Unity3D项目Plugins目录组织 https://blog.csdn.net/linxinfa/article/details/102978005 IPreprocessBuild 继承提供打包前&#xff0c;打包后接口 BuildAssetBundles UnityWebRequest’s DownloadHandlerAssetBundle / LoadFromFile / LoadFromMemoryAsync 数据完整性校…

使用秘钥登录服务器

在我们测试或生产环境中&#xff0c;为了服务器安全性&#xff0c;有时可能需要以 SSH 密钥的方式登录服务器&#xff0c;接下来&#xff0c;将演示如何通过 SSH 私钥的方式来远程服务器。 一、远程服务器生成密钥对 1、首先在目标远程服务器下生成 SSH 密钥对 ssh-keygen然…

谷粒商城—分布式基础

1. 整体介绍 1)安装vagrant 2)安装Centos7 $ vagrant init centos/7 A `Vagrantfile` has been placed in this directory. You are now ready to `vagrant up` your first virtual environment! Please read the comments in the Vagrantfile as well as documentation on…

TimesFM(Time Series Foundation Model)安装(2)

TimesFM&#xff08;Time Series Foundation Model&#xff09;安装简介 readme TimesFM&#xff08;Time Series Foundation Model&#xff09;安装简介&#xff08;1&#xff09;-CSDN博客https://blog.csdn.net/chenchihwen/article/details/144359861?spm1001.2014.3001…

Cesium进阶教程——自定义图形、外观、绘图基础、现有着色器移植至Cesium、ShadowMapping、视频GIS、模型压平、卷帘

基础必看 https://blog.csdn.net/m0_55049655/article/details/139720401 参考路线 http://www.xt3d.online/tutorial/further/article.html 自定义图形 https://blog.csdn.net/m0_55049655/article/details/138908327 https://blog.csdn.net/m0_55049655/article/details/14…