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

文章目录

  • 线性代数入门:机器学习零基础小白指南
    • 前言
    • 一、向量:数据的基本单元
      • 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 np

a = 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 norm

v = 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)

写在最后

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

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

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


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

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于 JNI + Rust 实现一种高性能 Excel 导出方案(下篇)

衡量一个人是否幸福,不应看他有多少高兴的事,而应看他是否为小事烦扰。只有幸福的人,才会把无关痛痒的小事挂心上。那些真正经历巨大灾难和深重痛苦的人,根本无暇顾及这些小事的。因此人们往往在失去幸福之后,才会发现…

Cesium中实现仿ArcGIS三维的动态图层加载方式

Cesium 加载 ArcGIS 动态图层的方式 如果你在 Cesium 中加载过 ArcGIS 的动态图层,你会发现,Cesium 对于动态图层仍然采用类似切片图层的逻辑进行加载。也就是每个固定的瓦片 export 一张图片。 这样会造成一些问题: 请求量大,…

信号处理:概念、技术、领域

目录 基本概念 主要技术 应用领域 信号处理是一个涉及分析、修改和再生信号的多学科领域。信号可以是各种形式的,例如声音、图像、视频或其他类型的监测数据。信号处理的主要目标是提取有用的信息并增强信号的质量。以下是信号处理的一些基本概念和应用&#xff…

【Redis】Redis 生成唯一 id

每个订单业务都需要有一个唯一的id,如果使用数据库自增id就会暴露规律,同时id会有一个最大的阈值,万一订单超过这个阈值,那就会出现问题。因此我们可以封装一个全局ID生成器,可以适用于分布式系统生成唯一ID&#xff0…

购物商城案例 -- VueCli创建项目,调整目录,vant组件库

基于VueCli创建项目 调整目录,新增两个目录 修改路由和App.vue 路由中规则清空 新建文件夹api和utils api文件夹:发请求的一些文件 utils文件夹:工具函数方法 vant组件库:第三方vue组件库 vant-ui 找到vant官网,进入va…

金融分析-Transformer模型(基础理论)

Transformer模型 1.基本原理 transformer的core是注意力机制,其本质就是编码器-解码器。他可以通过多个编码器进行编码,再把编码完的结果输出给解码器进行解码,然后得到最终的output。 1.1编码器 数据在编码器中会经过一个self-attention的…

【密码学】AES算法

一、AES算法介绍: AES(Advanced Encryption Standard)算法是一种广泛使用的对称密钥加密,由美国国家标准与技术研究院(NIST)于2001年发布。 AES是一种分组密码,支持128位、192位和256位三种不同…

朗致面试---IOS/安卓/Java/架构师

朗致面试---IOS/安卓/Java/架构师 一、面试概况二、总结三、算法题目参考答案 一、面试概况 一共三轮面试: 第一轮是逻辑行测,25道题目,类似于公务员考试题目,要求90分钟内完成。第二轮是技术面试,主要是做一些数据结…

51c嵌入式~单片机~合集2

我自己的原文哦~ https://blog.51cto.com/whaosoft/12362395 一、不同的电平信号的MCU怎么通信? 下面这个“电平转换”电路,理解后令人心情愉快。电路设计其实也可以很有趣。 先说一说这个电路的用途:当两个MCU在不同的工作电压下工作&a…

网络原理done

文章目录 ARP协议模拟一次ARP过程ARP周边问题ARP欺骗RARP DNS域名解析服务域名简介DNS结论 ICMP协议 NAT技术(重点)NAPTNAT缺点 内网穿透代理服务器正向代理反向代理 NAT和代理服务器区别 ARP协议 以这片区域为例 此时IP报文到达入口路由器R 此时路由器…

MATLAB中Simulink的信号线

Simulink以模块为最小单位,通过信号线互相连接,用户可通过GUI调配每个模块的参数,且仿真的结果能够以数值和图像等形象化方式具现出来。信号线可以传递一维数据、多维数据、向量数据或矩阵数据,甚至Bus型数据。Simulink使用不同的线形表示传递不同数据类型的信号线,…

集成方案 | Docusign + 泛微,实现全流程电子化签署!

本文将详细介绍 Docusign 与泛微的集成步骤及其效果,并通过实际应用场景来展示 Docusign 的强大集成能力,以证明 Docusign 集成功能的高效性和实用性。 在现代企业运营中,效率和合规性是至关重要的。泛微作为企业级办公自动化和流程管理的解决…

基于vue的quasarui框架和.NET CORE实现网站

首先安装quasar cli,然后进行配置 前台代码部分截图 后台部分截图 数据库 网站部分

一行代码解决vue3前端打包部署到服务器,动态配置http请求头后端ip方法教程无bug

只需要一行代码 vue3若依框架前端打包部署到服务器,需要部署到多个服务器上,每次打包会很麻烦,今天教大家一个简单的动态配置请求头api的方法,部署后能动态获取(修改)对应服务器的请求ip, 介绍两种方法,如…

openGauss开源数据库实战二十三

文章目录 任务二十三 openGauss 参数管理任务目标实施步骤一、启动参数文件及参数类型1.参数值修改后必须重新启动数据库的参数2.参数值修改后只需要reload操作的参数 二、设置数据库级参数三、设置用户级参数四、设置会话级参数五、将参数设置为默认值 任务二十三 openGauss 参…

杨振宁大学物理视频中黄色的字,c#写程序去掉(原版改进,三)

上一节,我们分清了主次矛盾,并搞定了主要矛盾(去掉黄色的字),这一节解决次要矛盾(矩形色带)。 我们的想法如图: 1,我们找到稳定黄色的最左边,最右边两点&…

ORACLE逗号分隔的字符串字段,关联表查询

使用场景如下: oracle12 以前的写法: selectt.pro_ids,wm_concat(t1.name) pro_names from info t,product t1 where instr(,||t.pro_ids|| ,,,|| t1.id|| ,) > 0 group by pro_ids oracle12 以后的写法: selectt.pro_ids,listagg(DIS…

JS-手写new

我们先再来理一理原型 Object1 {name:deng,age:18 } Object2 {name:ru,age:18 } const Person function(){} Person.prototype Object1; const p1 new Person(); console.log(p1.name); //deng Person.prototype null; console.log(p1.name); //deng上面给Person的构造函…

LabVIEW实验站反馈控制系统

开发了一套基于LabVIEW的软X射线磁性圆二色实验站的反馈控制系统。这套系统主要用于实现对实验站高电压的精确控制,从而保持照射在样品上的流强稳定性,为分析样品吸收谱提供可靠基准,同时提供了易用的用户界面和强大的数据存储功能。 项目背景…

Matlab笔记---clear、clc、clear all应用

在MATLAB中,clear、clc 和 clear all 是三个常用的命令,它们各自有不同的作用: clc: clc 命令用于清除MATLAB命令窗口中的所有输出。它不会删除任何变量、函数或文件,只是清除屏幕上的显示内容,让你可以更…