Sweet Snippet 之 Gram-Schmidt 正交化

2024-04-12 21:08

本文主要是介绍Sweet Snippet 之 Gram-Schmidt 正交化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Gram-Schmidt 正交化的简单实现

Gram-Schmidt(格拉姆-施密特) 正交化可以正交化一组给定的向量,使这些向量两两垂直,这里列出一份简单的实现(Lua):

-- vector add
function add(a, b)if a and b and #a == #b thenlocal ret = {}for i = 1, #a dotable.insert(ret, a[i] + b[i])endreturn retend
end-- vector sub
function sub(a, b)if a and b and #a == #b thenlocal ret = {}for i = 1, #a dotable.insert(ret, a[i] - b[i])endreturn retend
end-- dot product
function dot(a, b)if a and b and #a == #b thenlocal ret = 0for i = 1, #a doret = ret + a[i] * b[i]endreturn retend
end-- magnitude
function mag(a)local val = dot(a, a)if val thenreturn math.sqrt(val)end
end-- normalize, do not change param
function norm(a)local magnitude = mag(a)if magnitude and magnitude ~= 0 thenlocal normalize = {}for i = 1, #a dotable.insert(normalize, a[i] / magnitude)endreturn normalizeend
end-- project a to b
function proj(a, b)if a and b and #a == #b thenlocal norm_b = norm(b)local val = dot(a, norm_b)if val thenlocal projection = {}for i = 1, #norm_b dotable.insert(projection, norm_b[i] * val)endreturn projectionendend
end-- perpendicular a to b
function perp(a, b)local projection = proj(a, b)if projection thenreturn sub(a - projection)end
end-- gram schmidt
function gram_schmidt(...)local vecs = { ... }local ret = {}if #vecs > 0 thentable.insert(ret, vecs[1])endfor i = 2, #vecs dolocal base = vecs[i]for j = 1, i - 1 dobase = sub(base, proj(vecs[i], vecs[j]))endtable.insert(ret, base)vecs[i] = baseendreturn table.unpack(ret)
end-- use to check gram schmidt result
function check_perp(...)local vecs = { ... }for i = 1, #vecs - 1 dofor j = i + 1, #vecs dolocal val = dot(vecs[i], vecs[j])if math.abs(val) > 0.001 thenreturn falseendendendreturn true
end

有兴趣的朋友可以试试这组向量的 Gram-Schmidt 正交化:

a = ( 1 , 0 , 0 , 1 ) b = ( 0 , 1 , 0 , 1 ) c = ( 0 , 0 , 1 , 1 ) d = ( 0 , 1 , 1 , 1 ) \begin{aligned} & a = ( 1, 0, 0, 1 ) \\ & b = ( 0, 1, 0, 1 ) \\ & c = ( 0, 0, 1, 1 ) \\ & d = ( 0, 1, 1, 1 ) \end{aligned} a=(1,0,0,1)b=(0,1,0,1)c=(0,0,1,1)d=(0,1,1,1)

更多资料
  • wiki

这篇关于Sweet Snippet 之 Gram-Schmidt 正交化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/898244

相关文章

【大模型基础】P1 N-Gram 模型

目录 N-Gram 概述N-Gram 构建过程TokenN-Gram 实例第1步 构建实验语料库第2步 把句子分成 N 个 “Gram”第3步 计算每个 Bigram 在语料库中的词频第4步 计算出现的概率第5步 生成下一个词第6步:输入前缀,生成连续文本 上述实例完整代码N-Gram 的局限性 N-Gram 概述 N-Gram 诞生于统计学 NLP 初期,为解决词序列冗长导致的

word2vec 两个模型,两个加速方法 负采样加速Skip-gram模型 层序Softmax加速CBOW模型 item2vec 双塔模型 (DSSM双塔模型)

推荐领域(DSSM双塔模型): https://www.cnblogs.com/wilson0068/p/12881258.html   word2vec  word2vec笔记和实现 理解 Word2Vec 之 Skip-Gram 模型 上面这两个链接能让你彻底明白word2vec,不要搞什么公式,看完也是不知所云,也没说到本质. 目前用的比较多的都是Skip-gram模型 Go

每天一个数据分析题(五百一十七)- Skip-Gram模型

Skip-Gram模型的基础形式非常简单,为了更清楚地解释模型,我们先从最一般的基础模型来看Word2Vec。Skip-Gram模型不包含以下哪一项? A. 输入层 B. 池化层 C. 输出层 D. 隐藏层 数据分析认证考试介绍:点击进入 题目来源于CDA模拟题库 点击此处获取答案 数据分析专项练习题库 内容涵盖Python,SQL,统计学,数据分析理论,深度学习,可视化,机器学

自定义Xcode代码模板:Code Snippet

Xcode强大的代码提示功能是有目共睹的,用过都知道,可是你是否想过添加一些自定义的代码提示模板?你是否想让if默认的左括号挪到下一行?还有for、while、switch等等……如果你有这方面的需求的话,这篇文章刚好可以帮到你!  在Xcode左下角有个花括号的页签,这里面存储了很多代码提示模板,如下图 点击列表里面任一个项目都会弹出一个说明框,里面有个Edit和Done按钮,这很容

Word2Vec之Skip-Gram与CBOW模型

Word2Vec之Skip-Gram与CBOW模型 word2vec是一个开源的nlp工具,它可以将所有的词向量化。至于什么是词向量,最开始是我们熟悉的one-hot编码,但是这种表示方法孤立了每个词,不能表示词之间的关系,当然也有维度过大的原因。后面发展出一种方法,术语是词嵌入。 [1.词嵌入] 词嵌入(Word Embedding)是NL

在VS Code中使用Snippet Craft扩展提高编码效率

Snippet Craft 一个VS Code代码片段管理插件 功能 创建和插入代码片段 在编辑器区域右键菜单中点击插入Snippet,或在代码片段视图中点击条目,则会将代码片段插入到当前激活文档的光标位置。 代码片段编辑 代码片段在左侧栏中,根据创建时的文件内容类型,分组显示代码片段,可编辑已有的代码片段。 代码片段预览 鼠标移动到代码片段条目上时,显示tooltip预览

【线性代数】【二】2.10 标准正交基与正交矩阵

文章目录 前言一、标准正交基二、施密特正交化三、 正交矩阵总结 前言 本文将介绍正交基、正交矩阵、与施密特正交化算法。正交是向量中一种非常好的性质,意味着两个向量互相之间没有冗余,也容易被区分。 一、标准正交基 前面我们学习过,一个向量空间的基是指张成该空间的极大线性无关组。例如 [ 1 , 0 , 0 ] , [ 1 , 1 , 0 ] , [ 1 , 1 , 1

【因果推断python】51_去偏/正交机器学习3

目录 What is Non-Parametric About? What is Non-Parametric About? 在我们继续之前,我只想强调一个常见的误解。当我们考虑使用非参数 Double-ML 模型来估计 CATE 时,我们似乎会得到一个非线性治疗效果。例如,让我们假设一个非常简单的数据生成过程(DGP),其中 discont 对销售额的影响是非线性的,但却是通过

N-Gram模型2

斯坦福大学自然语言处理第四课“语言模型(Language Modeling)” 一、课程介绍 斯坦福大学于2012年3月在Coursera启动了在线自然语言处理课程,由NLP领域大牛Dan Jurafsky 和 Chirs Manning教授授课: https://class.coursera.org/nlp/ 以下是本课程的学习笔记,以课程PPT/PDF为主,其他参考资料为辅,融

测试基础14:测试用例设计方法-正交实验法

课程大纲 1、定义         正交表是一种在数学和统计学中使用的特殊表格,用于设计实验,以在有限的测试次数下获得最大的测试覆盖率。         它通过均衡搭配的特性,从全面试验中挑选出有代表性的点进行测试。 2、应用场景         适用于配置类软件中组合比较多的情况。与判定表对比,输出结果不复杂,不会因组合不同有非常大差异。(如:多个单选下拉框、选项多的单选框组合