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

相关文章

【因果推断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、应用场景         适用于配置类软件中组合比较多的情况。与判定表对比,输出结果不复杂,不会因组合不同有非常大差异。(如:多个单选下拉框、选项多的单选框组合

Matlab解决施密特正交规范化矩阵(代码开源)

#最近在学习matlab,刚好和线代论文重合了 于是心血来潮用matlab建了一个模型来解决施密特正交规范化矩阵。 我们知道这个正交化矩阵挺公式化的,一般公式化的内容我们都可以用计算机来进行操作,节约我们人工的时间。 我们首先把矩阵导入进去,之后计算投影的长度进行缩减。进行正交化 之后单独进行规范化 代码如下:   %%% 施密特正交化a=ones(3,3); % 假设3行,3列

CGS与MGS的矩阵正交化-C语言实现

格拉姆-施密特正交化和改进的格拉姆-施密特正交化 格拉姆-施密特正交化CGS 数学公式 代码实现: 过程版 矩阵运算实现的难点在于每次运算都是一个向量,需要for循环进行,会带来运算时在代码中的复杂,进而难以理解代码的过程 Q矩阵是{e...} R矩阵是上三角矩阵 Q[0] = A[0]; // -> b1 = a1R[0][0] = norm(Q[0], m)

使用sklearn CountVectorizer 实现n-gram

#coding=utf-8'''Created on 2018-1-25'''from sklearn.feature_extraction.text import CountVectorizertext = ["A smile is the most charming part of a person forever.","A smile is"]# ngram_range=(2, 2)表明

线性代数|机器学习-P4正交矩阵中的标准正交向量

文章目录 1. 正交矩阵Q1.1 矩阵Q的推导1.2 |Qx|=|x| 2. 常见正交矩阵2.1 旋转矩阵2.2 镜像矩阵2.3 Householder矩阵2.4 Hadamard矩阵2.4 小波矩阵2.5 傅里叶级数矩阵 1. 正交矩阵Q 1.1 矩阵Q的推导 方阵A正交的充要条件是A的行(列)向量组是单位正交向量组. 我们定义正交矩阵Q表示如下: Q = [ q 1 q

UVA 10497 - Sweet Child Makes Trouble(DP+高精度)

题目链接:10497 - Sweet Child Makes Trouble 题意:n个物品,原来物品属于一个地方,现在要把物品重新放回去,问能放几种使得每个物品都与原来位置不同 思路:递推,一开始随便搞了个二维状态,dp[i][j]表示i个物品,有j个位置不同,那么dp[n][n]就是答案,递推式为: dp[i][j] = 1 (j == 0) dp[i] [j]

《自然语言处理宗述》英文版N-gram阅读笔记

第四章 N-gram模型:用前面的N-1个词去预测第N个词的概率的模型。并且这种预测第N个词的模型。N指的是句子中的连续N个词。最终显示他与预测一系列词出现的概率相似。 4.2 simple(unsmoothed)N-grams 我们的目标是计算在给定一些内容h,来计算词w出现的概率,即P(w | h).比如计算P(the | its water is so transpar

科研软件 | 正交设计助手 安装教程

软件介绍 正交设计助手是一个十分强大的实验室校验工具,正交设计助手使用起来非常的简单,正交设计助手是一款针对正交实验设计及实验结果的分析而制作的专业软件。正交设计方法是我们常用的实验设计方法,它让我们以较少的实验次数得到科学的实验结论。 安装步骤 1、双击解压 2、进入解压后文件 3、双击运行 4、软件安装完成 软件下载 https://docs.q