线性代数 向量

一、定义

几何定义:向量是一个有方向和大小的量,通常用箭头表示。向量的起点称为原点,终点称为向量的端点。

代数定义 :向量是一个有序的数组 ,通常表示为列向量或行向量。

行向量就是 1*n的形式(行展开)

列向量就是 n*1的形式(列展开)

二、运算

加法、数乘、点积和叉积(向量维度必须相同,若不相同,可以补零)

1、加法

向量加法是将两个向量的对应分量相加,得到一个新的向量()。

2、数乘

向量数乘是将一个向量的每个分量乘以一个标量,得到一个新的向量()。

3、点积

向量点积(内积)是将两个向量的对应分量相乘,然后将结果相加,得到一个标量

u⋅v=++⋯+

例如:存在两个向量,求相加、分别乘2、两者相乘:

解:

注意:加减法、数乘都是得到向量结果,向量相乘得到标量(准确数值)。

三、特征值与特征向量

A 是一个 n×n 的方阵 。如果存在一个非零列向量 v 和一个标量 λ,使得: Av=λv。

那么λ 称为矩阵 A的特征值,v 称为对应于特征值 λ 的特征向量(λ可以为0,而v不能为0,并且v是列向量 )。

根据 Av=λv 推 (A-λE)v=0 (λ 是标量,转化为矩阵才能进行运算,则需要乘以单位矩阵),

v不可以为零,那么 A-λE = 0

例如:

解:求特征值 λ :

A-λE = 0 => = (-1- λ)(3-λ)(2-λ) - (-4) * (2-λ) = (2-λ)((-1- λ)(3-λ)+4) = (2-λ)((-1- λ)(3-λ) +4) = (2-λ)(λ*λ -3λ +λ +4) = (2-λ)(λ-1)(λ-1) =0

那么 λ 的值为 2,1

求特征向量 (A-λE)v=0 ,则需要 (A-λE) 的矩阵来得到特征向量

在 λ = 2 的情况下:

= ,初等变化 (第一行和第三行交换;第二行减去第三行;第二行减去第一行;第二行与第三行交换;第二行 乘 4加上第一行, 第二行除以4)最终结果为

,令为A1

根据 (A-λE)v=0 得到 A1 * v = 0 ,则 等价于 * = =>

1*a + 0*b +0*c = 0 ; 0*a + 1*b +0*c = 0 ; 0*a + 0*b +0*c = 0

综合可得,a=b=0,c 可以是任何数值。即 v =

在 λ = 1 的情况下:

= ,初等变化 后为 与上面类型一致,则结果还是a=b=0,c 可以是任何数值。

四、向量的模

向量 v 的模记作 ∥v∥,计算公式为:

五,向量内积

对于两个 n 维向量 a=(a1,a2,...,an) 和 b=(b1,b2,...,bn),它们的内积(点积)表示为 a⋅b,计算公式为: a * b=++⋯+

在几何上,内积也可以通过向量的模和它们之间的夹角来表示。具体来说,如果 θ 是向量 a 和 b 之间的夹角,那么内积可以表示为: a * b=||a|| * ||b|| *cos⁡(θ)

例如:有两个三维向量 a 和 b :a=(2,3,1),b=(4,−1,2),

其内积为 a⋅b=(2⋅4)+(3⋅−1)+(1⋅2)=8-3+2=7

a⋅b=∥a∥∥b∥cos⁡(θ) => cos⁡(θ) = a⋅b / ∥a∥∥b∥ = 7/ / = 0.408

六、根据模扩展 - 余弦相似度

cos= ab / (|a|*|b|)

使用余弦相似度计算两段文本的相似度

将语句拆分为多个字或词,之后将两个语句的所有内容放入集合,按照词在集合中的次数进行整理得到向量(集合中的词位置就是向量的下标),两个向量求余弦值。

例如;

句子A:这只皮靴号码大了。那只号码合适。

句子B:这只皮靴号码不小,那只更合适。

拆分句子得到:

listA=这, 只, 皮靴, 号码, 大, 了, 那, 只, 号码, 合适

listB=这, 只, 皮靴, 号码, 不, 小, 那, 只, 更, 合适

放入集合

set=号码, 合适, 那, 更, 了, 大, 皮靴, 这, 只, 不, 小

进行排序加次数计算

freqListA=2, 1, 1, 0, 1, 1, 1, 1, 2, 0, 0

freqListB=1, 1, 1, 1, 0, 0, 1, 1, 2, 1, 1

套用余弦函数计算相似度

cos = 10 /12.94 = 0.77

复制代码
import math
# 输入两个语句
listA1 =input('请输入第一个句子:')
listB1 =input('请输入第二个句子:')
print(f'你输入的第一个句子为:{listA1}' )
print(f'你输入的第一个句子为:{listB1}' )

#拆分后排序
listA =list(listA1)
listB =list(listB1)
listA.sort()
listB.sort()

#将拆分内容放入集合,去掉重复后转成列表获取下标
C =set(listA+listB)
listC=list(C)
listC.sort()

#创建两个空列表
freqlsitA=[]
freqlsitB=[]

#根据两个列表的数据并集 求向量列表的长度
for i in range(len(listC)):
    freqlsitA.append(str(f'{i}'))
    freqlsitB.append(str(f'{i}'))

#根据数据并集内容判断是否存在,若存在则计数放在与集合同位置的地方,若不存在,则将同位置修改为0
for i,j in enumerate(listC):
    if j in listA:
        freqlsitA[listC.index(j)] = listA.count(j)
    else:
        freqlsitA[listC.index(j)] = 0
    if j in listB:
        freqlsitB[listC.index(j)] = listB.count(j)
    else:
        freqlsitB[listC.index(j)] = 0

#创建三个变量用来存放数学计算所需要的数据内容
a=0
b=0
c=0
for i in range(len(freqlsitA)):
    a += freqlsitA[i]*freqlsitB[i]
    b +=freqlsitA[i] * freqlsitA[i]
    c +=freqlsitB[i] * freqlsitB[i]

#余弦值等于相乘累计 处于平方累计之后平方根的相乘
COS = a /(math.sqrt(b) *math.sqrt(c))

if COS >0.65:
    print('这两个句子相似')
else:
    print("这两个句子不相似")
相关推荐
suaizai_25 分钟前
AI进化:从“回答问题”到“完成任务”
人工智能
广凌股份(广凌科技)31 分钟前
2026年高校采购管理系统选型指南 | 5款软件深度测评
大数据·人工智能
加密社31 分钟前
GPT-6 Astra 100 Studies | 100个AI生成的HTML5视觉作品集
人工智能·gpt
MindUp32 分钟前
AI大模型办公自动化工具的技术选型与多维度评估实践
人工智能
黎阳之光33 分钟前
数字孪生赋能全域水网,实现水资源管控与节水降碳双向提升
人工智能·物联网·算法·安全·数字孪生
TMT星球39 分钟前
大晓发布全球首个可仿真人–场景交互重建框架HSImul3R
人工智能·科技·机器人
kyriewen42 分钟前
面试官问我:AI 都能写代码了,前端凭什么还值 25K
前端·javascript·人工智能
FPC工厂——皇榜科技1 小时前
机器人灵巧手线路板:从“握得住”到“摸得准”:一只机械手的柔性神经密码
网络·人工智能·科技·机器人·pcb工艺
JMchen1231 小时前
Cursor高阶玩法:.cursorrules编写与Spec-Driven开发实战,把AI调教成专属结对编程搭档
人工智能·vscode·kotlin·cursor·结对编程·spec-driven·.cursorrules
szxinmai主板定制专家1 小时前
基于 RK3588+RK1820/28 算力卡的国产工控机,适用于机器视觉,机器人等边缘算力场景
人工智能·fpga开发·zynq·控制器·mpsoc·半导体设备