向量和矩阵概念

矩阵

矩阵的几何意义是坐标的变换。

如果一个矩阵存在特征向量和特征值,那么这个矩阵的特征向量就表示了它在空间中最主要的运动方向。

矩阵由多个长度相等的向量组成,其中的每列或者每行就是一个向量。因此,我们把向量延伸一下就能得到矩阵(Matrix)。
向量其实也是一种特殊的矩阵。如果一个矩阵是 n × m 维,那么一个 n × 1 的矩阵也可以称作一个 n 维列向量;而一个 1 × m 矩阵也称为一个 m 维行向量。

从数据结构的角度看,向量是一维数组,那矩阵就是一个二维数组。如果二维数组里绝大多数元素都是 0 或者不存在的值,那么我们就称这个矩阵很稀疏(Sparse)。对于稀疏矩阵,我们可以使用哈希表的链地址法来表示。所以,矩阵中的每个元素有两个索引。

矩阵加法

只要保证参与操作的两个矩阵具有相同的行维度和列维度,我们就可以把对应的元素两两相加。

矩阵乘法

矩阵的乘法默认为左矩阵的行向量和右矩阵的列向量两两点乘。
在这里插入图片描述
矩阵 Z 为矩阵 X 和 Y 的乘积,X 是形状为 i x k 的矩阵,而 Y 是形状为 k × j 的矩阵。X 的列数 k 必须和 Y 的行数 k 相等,两者才可以进行这样的乘法。

可以把这个过程看作矩阵 X 的行向量和矩阵 Y 的列向量两两进行点乘。

在这里插入图片描述

两个矩阵中对应元素进行相乘,这种操作也是存在的,我们称它为元素对应乘积,或者 Hadamard 乘积。

矩阵转置

转置(Transposition)是指矩阵内的元素行索引和纵索引互换,例如 Xij​ 就变为 Xji​,相应的,矩阵的形状由转置前的 n × m 变为转置后的 m × n。
从几何的角度来说,矩阵的转置就是原矩阵以对角线为轴进行翻转后的结果。
在这里插入图片描述

单位矩阵

单位矩阵中,所有沿主对角线的元素都是 1,而其他位置的所有元素都是 0。
通常我们只考虑单位矩阵为方阵的情况,也就是行数和列数相等,我们把它记做 In​,n 表示维数。

逆矩阵或矩阵逆(Matrix Inversion)

有矩阵 X,我们把它的逆矩阵记做 X−1,两者相乘的结果是单位矩阵。

在这里插入图片描述

向量空间

几个特性

  • 空间由无穷多个的位置点组成;
  • 这些点之间存在相对的关系;
  • 可以在空间中定义任意两点之间的长度,以及任意两个向量之间的角度;
  • 这个空间的点可以进行移动。

向量加法:

在这里插入图片描述

有两个向量 x 和 y,它们的长度分别是 x’和 y’,它们的相加结果是 x+y,这个结果所对应的点相当于 x 向量沿着 y 向量的方向移动 y’,或者是 y 向量沿着 x 向量的方向移动 x’。

向量乘法

在这里插入图片描述
点乘的作用是把相乘的两个向量转换成了标量,用点乘来计算向量的长度以及两个向量间的夹角。
信息检索和机器学习等领域充分利用了向量空间模型,计算不同对象之间的相似程度。

### 向量矩阵卷积的概念 向量矩阵的卷积是一种数学运算,通常用于信号处理、图像处理以及机器学习等领域。它涉及两个函数之间的操作,在离散情况下表现为加权求的过程。 在编程中,向量矩阵的卷积可以通过多种方式实现。以下是关于其概念及其具体实现的一些说明: #### 数学定义 卷积可以被看作是一个输入序列 \( f \) 另一个称为核或滤波器的序列 \( g \),通过滑动窗口的方式计算两者的乘积累加结果[^1]。对于一维情况下的向量卷积,公式如下所示: \[ (f * g)[n] = \sum_{m=-\infty}^{\infty} f[m]g[n-m] \] 当扩展到二维矩阵时,卷积则表示为双层累加的形式: \[ (C[i,j]) = \sum_u \sum_v A[u,v]B[i-u, j-v] \] 其中 \( C \) 是卷积的结果矩阵,\( A \) 表示原始数据矩阵,而 \( B \) 则代表卷积核矩阵。 #### 编程中的实现方法 下面分别给出 Python 中基于 NumPy 库的一维向量卷积与二维矩阵卷积的具体代码实例。 ##### 一维向量卷积 ```python import numpy as np def vector_convolution(v1, v2): result = np.convolve(v1, v2, mode='full') return result v1 = [1, 2, 3] v2 = [-1, 0, 1] print(vector_convolution(v1, v2)) ``` 上述 `np.convolve` 函数实现了标准的一维卷积功能,并允许指定不同的模式来控制输出长度。 ##### 二维矩阵卷积 ```python from scipy import signal def matrix_convolution(matrix, kernel): result = signal.convolve2d(matrix, kernel, boundary='fill', mode='same') return result matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] kernel = [[-1, 0, 1], [-2, 0, 2], [-1, 0, 1]] result_matrix = matrix_convolution(matrix, kernel) for row in result_matrix: print(row) ``` 这里利用 SciPy 的 `convolve2d` 方法完成二维数组间的卷积过程,参数设置使得边界填充并保持原尺寸大小不变。 #### 实现注意事项 实际应用过程中需要注意几个方面的问题:首先是性能优化;其次是边缘效应如何处理——这取决于具体的业务需求决定采用何种策略填补空白区域或者截断超出部分的数据点。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值