线性代数 向量

一、定义

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

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

行向量就是 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("这两个句子不相似")
相关推荐
雪兽软件1 小时前
人工智能和大数据如何改变企业?
大数据·人工智能
UMS攸信技术3 小时前
汽车电子行业数字化转型的实践与探索——以盈趣汽车电子为例
人工智能·汽车
ws2019073 小时前
聚焦汽车智能化与电动化︱AUTO TECH 2025 华南展,以展带会,已全面启动,与您相约11月广州!
大数据·人工智能·汽车
堇舟4 小时前
斯皮尔曼相关(Spearman correlation)系数
人工智能·算法·机器学习
爱写代码的小朋友4 小时前
使用 OpenCV 进行人脸检测
人工智能·opencv·计算机视觉
Cici_ovo5 小时前
摄像头点击器常见问题——摄像头视窗打开慢
人工智能·单片机·嵌入式硬件·物联网·计算机视觉·硬件工程
QQ39575332375 小时前
中阳智能交易系统:创新金融科技赋能投资新时代
人工智能·金融
yyfhq5 小时前
dcgan
深度学习·机器学习·生成对抗网络
这个男人是小帅5 小时前
【图神经网络】 AM-GCN论文精讲(全网最细致篇)
人工智能·pytorch·深度学习·神经网络·分类
放松吃羊肉6 小时前
【约束优化】一次搞定拉格朗日,对偶问题,弱对偶定理,Slater条件和KKT条件
人工智能·机器学习·支持向量机·对偶问题·约束优化·拉格朗日·kkt