TA学习之路——1.2向量

数学基础——向量 详解

1. 什么是向量

在数学中,向量(也称为欧几里得向量、几何向量、矢量),指具有大小(magnitude)和方向的量。

2. 向量的表示方式

·代数表示
大小或小写字母+箭头:
A →   或   b →         A B →   或   a b → \overrightarrow{A}\ \ 或\ \ \overrightarrow{b} \ \ \ \ \ \ \ \overrightarrow{AB}\ \ 或\ \ \overrightarrow{ab} A     b        AB     ab
·几何表示
1.二维
二维
2.三维
在这里插入图片描述

坐标表示
1.二维
分别取与x轴、y轴方向相同的两个单位向量i,j作为一组基底。有且只有一对实数(x,y),使得a=xi+yj,因此把实数对(x,y)叫做向量a的坐标,记作a=(x,y)。
A → = ( a x , a y )    ,    B → = ( b x , b y ) \overrightarrow{A}=(a_x,a_y)\ \ ,\ \ \overrightarrow{B}=(b_x,b_y) A =(ax,ay)  ,  B =(bx,by)
2.三维
分别取与x轴、y轴,z轴方向相同的3个单位向量i,j,k作为一组基底。有且只有一组实数(x,y,z),使得a=ix+jy+kz,因此把实数对(x,y,z)叫做向量a的坐标,记作a=(x,y,z)。
A → = ( a x , a y , a z )    ,    B → = ( b x , b y , b z ) \overrightarrow{A}=(a_x,a_y,a_z)\ \ ,\ \ \overrightarrow{B}=(b_x,b_y,b_z) A =(ax,ay,az)  ,  B =(bx,by,bz)

矩阵表示
1.二维
A → = [ a x a y ]     B → = [ b x b y ] \overrightarrow{A}= \begin{bmatrix} a_x \\ a_y \end{bmatrix}\ \ \ \overrightarrow{B}= \begin{bmatrix} b_x \\ b_y \end{bmatrix} A =[axay]   B =[bxby]
2.三维
A → = [ a x a y a z ]     B → = [ b x b y b z ] \overrightarrow{A}= \begin{bmatrix} a_x \\ a_y\\ a_z \end{bmatrix}\ \ \ \overrightarrow{B}= \begin{bmatrix} b_x \\ b_y\\ b_z \end{bmatrix} A = axayaz    B = bxbybz

3. 向量的基本定义

·向量是有大小和方向的有向线段
·向量没有位置,只有大小和方向
·向量的箭头是向量的结束,向量的开始
·向量描述的位移能被认为是与轴平行的位移序列

代码实现:
二维

public struct M_Vector2
{
   
   
    public float x;
    public float y;
    public M_Vector2(float x,float y)
    {
   
   
        this.x = x;
        this.y = y;
    }
}

三维

public struct M_Vector3
{
   
   
    public float x;
    public float y;
    public float z;
    public M_Vector3(float x,float y,float z)
    {
   
   
        this.x = x;
        this.y = y;
        this.z = z;
    }
}

4. 向量的运算

设 a → = ( a x , a y )   ,   b → = ( b x , b y ) 设\overrightarrow{a}=(a_x,a_y) \ , \ \overrightarrow{b}=(b_x,b_y) a =(ax,ay) , b =(bx,by)
4.1加法
向量的加法满足平行四边形法则和三角形法则, O A → + O B → = O C →   a = [ a x a y ]    ,    b = [ b x b y ]   a + b = [ a x + b x a y + b y ] = [ a x + b x a y + b y ] [ 1 1 ]   a + 0 = 0 + a   交换律: a + b = b + a   结合律:( a + b ) + c = a + ( b + c ) 向量的加法满足平行四边形法则和三角形法则, \\ \overrightarrow{OA}+\overrightarrow{OB}=\overrightarrow{OC} \\ \ \\ a= \begin{bmatrix} a_x \\ a_y \end{bmatrix}\ \ , \ \ b= \begin{bmatrix} b_x \\ b_y \end{bmatrix} \\ \ \\ a + b = \begin{bmatrix} a_x + b_x\\ a_y + b_y \end{bmatrix}= \begin{bmatrix} a_x + b_x\\ a_y + b_y \end{bmatrix} \begin{bmatrix} 1\\ 1 \end{bmatrix} \\ \ \\ a+0 = 0+ a \\ \ \\ 交换律:a+b=b+a \\ \ \\ 结合律:(a+b)+c=a+(b+c) 向量的加法满足平行四边形法则和三角形法则,OA +OB =OC  a=[axay]  ,  b=[bxby] a+b=[ax+bxay+by]=[ax+bxay+by][11] a+0=0+a 交换律:a+b=b+a 结合律:(a+b+c=a+(b+c)
代码实现:
二维

    /// 两个向量相加
    public static M_Vector2 operator+(M_Vector2 m_Vector2_A,M_Vector2 m_Vector2_B)
    {
   
   
        return new M_Vector2(m_Vector2_A.x + m_Vector2_B.x, m_Vector2_A.y + m_Vector2_B.y);
    }

三维

//加法
    public static M_Vector3 operator +(M_Vector3 v3_A,M_Vector3 v3_B)
    {
   
   
        return new M_Vector3(v3_A.x + v3_B.x, v3_A.y + v3_B.y, v3_A.z + v3_B.z);
    
<think>嗯,用户再次询问"entry-wise"在机器学习中的具体含义和翻译,看来ta对这个术语的理解还有疑问。之前虽然已经解释过逐元素操作的概念,但用户可能更关注实际应用场景和中文表达的准确性。用户提供的三条引用其实和当前问题关联不大,主要涉及基础机器学习算法(k近邻、决策树、朴素贝叶斯)的实现细节。不过从引用[2]里提到的"向量的每个元素赋值操作"倒是能佐证entry-wise的本质——对数据结构中的单个元素独立操作。需要强调几个关键点:第一,中文应统一译为"逐元素操作",这个译名在学术文献和教材中已被广泛接受;第二,必须区分entry-wise与广播机制的不同,后者虽然也涉及元素级操作,但包含维度自动扩展;第三,要突出该操作在GPU并行计算中的优势。考虑到用户可能是非计算机背景的学习者,应该用更直观的比喻说明:就像超市结账时每个顾客独立结算(entry-wise),而不是整队顾客打包收费(矩阵乘法)。激活函数ReLU的例子也很贴切——每个神经元像独立的水龙头,打开与否只取决于自身输入值。突然想到用户可能混淆了"entry-wise"和"sample-wise"(按样本操作),这点需要澄清。前者关注数据结构的元素级处理,后者侧重样本批次划分。在代码示例里应该同时展示NumPy和PyTorch的实现,方便不同框架使用者理解。最后决定在相关问题中加入TensorFlow的示例对比,因为用户引用的文献多基于传统机器学习,而现代深度学习框架对entry-wise操作有更高效的实现。</think> 在机器学习中,**entry-wise**(中文译为**逐元素操作**)指对矩阵向量或张量中的**每个独立元素**执行相同操作,而非对整个数据结构进行运算。其核心在于操作的**独立性**和**维度不变性**。 ### 具体含义与示例 #### 1. **数学定义** 设矩阵 $A, B \in \mathbb{R}^{m \times n}$,逐元素运算 $f$ 满足: $$ [f(A, B)]_{ij} = f(A_{ij}, B_{ij}) $$ 例如逐元素乘法(Hadamard积): $$ (A \odot B)_{ij} = A_{ij} \times B_{ij} $$ #### 2. **典型场景** - **激活函数** ReLU函数独立处理每个神经元输出: $$ \text{ReLU}(z_i) = \max(0, z_i) $$ 如输入向量 $z = [1.2, -0.5, 3.0]$,输出为 $[1.2, 0, 3.0]$[^1]。 - **特征标准化** 对数据集 $X \in \mathbb{R}^{n \times d}$ 的每列(特征)独立归一化: $$ X^{\text{norm}}_{ij} = \frac{X_{ij} - \mu_j}{\sigma_j}, \quad \mu_j=\text{均值}, \ \sigma_j=\text{标准差} $$ - **损失计算** 交叉熵损失对每个样本独立计算: $$ \mathcal{L}_i = -y_i \log(\hat{y}_i) $$ #### 3. **与非逐元素操作的区别** | **操作类型** | **示例** | 是否逐元素 | |--------------------|--------------------------|------------| | 矩阵乘法 | $C = A \times B$ | ❌ | | 卷积操作 | $\text{Conv}(A, K)$ | ❌ | | Sigmoid激活 | $\sigma(z_i)=\frac{1}{1+e^{-z_i}}$ | ✅ | | 特征缩放 | $X_{ij} / \max_k |X_{kj}|$ | ✅ | ### 技术实现(Python示例) ```python import numpy as np # 创建矩阵 A = np.array([[1, 2], [3, 4]]) B = np.array([[5, 6], [7, 8]]) # 逐元素加法(entry-wise) C = A + B # 输出:[[6, 8], [10, 12]] # 逐元素指数运算 exp_A = np.exp(A) # 输出:[[e^1, e^2], [e^3, e^4]] # 对比非逐元素操作 dot_product = np.dot(A, B) # 矩阵乘法:[[19, 22], [43, 50]] ``` ### 为什么需要逐元素操作? 1. **并行高效**:每个元素独立计算,天然适配GPU并行加速[^2]。 2. **局部特性保留**:如激活函数需保留神经元的独立响应特性。 3. **梯度计算简化**:反向传播时可直接对单个元素求导(如ReLU的梯度为0或1)[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值