线性代数 向量

一、定义

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

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

行向量就是 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("这两个句子不相似")
相关推荐
浊酒南街11 分钟前
Statsmodels之OLS回归
人工智能·数据挖掘·回归
风间琉璃""13 分钟前
二进制与网络安全的关系
安全·机器学习·网络安全·逆向·二进制
畅联云平台40 分钟前
美畅物联丨智能分析,安全管控:视频汇聚平台助力智慧工地建设
人工智能·物联网
加密新世界1 小时前
优化 Solana 程序
人工智能·算法·计算机视觉
Java Fans1 小时前
梯度提升树(Gradient Boosting Trees)详解
机器学习·集成学习·boosting
hunteritself1 小时前
ChatGPT高级语音模式正在向Web网页端推出!
人工智能·gpt·chatgpt·openai·语音识别
Che_Che_1 小时前
Cross-Inlining Binary Function Similarity Detection
人工智能·网络安全·gnn·二进制相似度检测
哈市雪花1 小时前
图像处理 之 凸包和最小外围轮廓生成
图像处理·人工智能·图形学·最小外围轮廓·最小外包
LittroInno1 小时前
无人机侦察打击方案(3)
人工智能·无人机
如若1231 小时前
实现了图像处理、绘制三维坐标系以及图像合成的操作
图像处理·人工智能