精华内容
下载资源
问答
  • 向量的单位化是指,将...下面各种列向量单位化的MATLAB代码进行比较。MATLAB版本为R2019a,CPU为Intel i7 8700.一、两层for循环先试试最笨的两层for循环。逻辑很接近C的语言逻辑,很容易理解。function test A ...

    向量的单位化是指,将向量的每个元素除以向量的模(2-范数),使得向量的模(2-范数)变为1.

    在机器学习、压缩感知、稀疏表现等方面,经常需要对矩阵的每个列向量进行单位化。下面对各种列向量单位化的MATLAB代码进行比较。MATLAB版本为R2019a,CPU为Intel i7 8700.

    一、两层for循环

    先试试最笨的两层for循环。逻辑很接近C的语言逻辑,很容易理解。

    function test
    A  = randn(1e4,1e4);
    f1 = @() fun1(A);
    fprintf("矩阵列向量单位化两层for循环耗时%.4f秒n",timeit(f1));
    end
    
    %% 两层for循环
    function A = fun1(A)
    for ii = 1:size(A,2)
        tmp = 0;
        for jj = 1:size(A,1)
            tmp = tmp + A(jj,ii)^2;
        end
        tmp = sqrt(tmp);
        for jj = 1:size(A,1)
            A(jj,ii) = A(jj,ii)/tmp;
        end
    end
    end

    10000×10000的矩阵列向量单位化,两层for循环仅耗时0.5877秒。比我想象的快的多,MATLAB for循环速度慢在新版MATLAB面前就是个笑话。

    二、for循环+sum函数

    function test
    A  = randn(1e4,1e4);
    f2 = @() fun2(A);
    fprintf("矩阵列向量单位化for循环+sum函数耗时%.4f秒n",timeit(f2));
    end
    
    %% 单层for循环 + sum函数
    function A = fun2(A)
    for ii = 1:size(A,2)
        A(:,ii) = A(:,ii)/sqrt(sum(A(:,ii).^2));
    end
    end

    单层for循环+sum函数,居然耗时0.6027秒,比两层for循环还慢,令人震惊!看来MATLAB对for循环的优化已经到了令人发指的地步。

    三、for循环+norm函数

    norm函数是built-in函数,用于求矩阵、向量的范数,默认是2-范数。注意,矩阵范数与矩阵列向量的范数不是一个概念。

    function test
    A  = randn(1e4,1e4);
    f3 = @() fun3(A);
    fprintf("矩阵列向量单位化for循环+norm函数耗时%.4f秒n",timeit(f3));
    end
    
    %% 单层for循环 + norm函数
    function A = fun3(A)
    for ii = 1:size(A,2)
        A(:,ii) = A(:,ii)/norm(A(:,ii));
    end
    end

    单层for循环+sum函数,耗时0.5496秒,优于两层for循环。

    四、向量化(右乘对角矩阵)

    采用右乘一个对角矩阵的方式对矩阵进行缩放,常见的列向量单位化操作。

    function test
    A  = randn(1e4,1e4);
    f4 = @() fun4(A);
    fprintf("矩阵列向量单位化:右乘对角矩阵法耗时%.4f秒n",timeit(f4));
    end
    
    %% 右乘对角矩阵实现对原矩阵的缩放
    function A = fun4(A)
    A = A*diag(1./sqrt(sum(A.^2,1)));
    end

    耗时7.9222秒!!!彻底翻车,大量的时间花费在分配内存生成10000×10000的对角矩阵上,效率低的令人发指!

    五、bsxfun + sum函数

    虽然Compatible Array Sizes功能已经取代了bsxfun函数,但我仍然喜欢写成bsxfun的形式。

    function test
    A  = randn(1e4,1e4);
    f5 = @() fun5(A);
    fprintf("矩阵列向量单位化:bsxfun + sum耗时%.4f秒n",timeit(f5));
    end
    
    %% bsxfun + sum
    function A = fun5(A)
    A = bsxfun(@rdivide,A,sqrt(sum(A.^2)));
    end

    耗时0.3529秒。bsxfun一如既往的给力。

    六、bsxfun + arrayfun(for)

    arrayfun本质上还是for循环,只不过形式更加简洁。

    function test
    A  = randn(1e4,1e4);
    f6 = @() fun6(A);
    fprintf("矩阵列向量单位化:bsxfun + arrayfun耗时%.4f秒n",timeit(f6));
    end
    
    %% bsxfun + arrayfun + norm
    function A = fun6(A)
    f = @(ii) norm(A(:,ii));
    A = bsxfun(@rdivide,A,arrayfun(f,1:size(A,2)));
    end

    耗时0.2949秒!效果非常好。

    七、bsxfun + vecnorm

    MATLAB 有自带的对矩阵列向量求范数的built-in函数,vecnorm,试一下运行效率如何。(这个函数我也是写文章时才发现的)

    function test
    A  = randn(1e4,1e4);
    f7 = @() fun7(A);
    fprintf("矩阵列向量单位化:bsxfun + vecnorm耗时%.4f秒n",timeit(f7));
    end
    
    %% bsxfun + vecnorm
    function A = fun6(A)
    A = bsxfun(@rdivide,A,vecnorm(A));
    end

    耗时仅0.1565秒! Amazing

    七、不同大小的矩阵测试

    function runTime = main
    % 测试矩阵的大小
    nRows = [10,50,100,500,1e3,5e3,1e4,5e4,1e5];
    nColu = [10,50,100,500,1e3,5e3];
    
    runTime = inf(numel(nRows),numel(nColumn),6);
    for ii = 1:numel(nRows)
        for jj = 1:numel(nColu)
            A = randn(nRows(ii),nColu(jj));
            for kk = 1:6
                f{kk} = eval([' @() fun', num2str(kk), '(A);']);
                runTime(ii,jj,kk) = timeit(f{kk});
            end
            [mTime,idx] = min(runTime(ii,jj,:));
            fprintf('%d×%d矩阵列向量单位化最快的是 fun%d:%.4f秒n',nRows(ii),nColu(jj),idx,mTime);
        end
    end

    测试表明,当矩阵

    维度,M,N<100时,上述6种方法的耗时差别不大,相比之下,双层for循环(fun1)与向量化-右乘对角矩阵(fun4)的速度稍快一些。M>100时,bsxfun+vecnorm函数(fun7)速度最快。

    结论:对于小规模矩阵,向量化(fun4)速度最快,理解起来也很方便;中等或大规模矩阵,bsxfun+vecnorm函数(fun7)速度最快.

    易夕:MATLAB Tricks 专栏目录zhuanlan.zhihu.com
    展开全文
  • 对向量单位化的理解 在坐标系中,只看x轴时,如果点(3,0),它的长度是3,那么它的单位化为 x/len=3/3=1,是它的单位化 向量与它不同的地方在于,向量要看x,y两个轴。 只看一个轴是单位向量为1,如果看两个轴...
    sqrt(2)=1.414
    sqrt(8)=2.828
    x/len=0.707

    对向量单位化的理解
    在坐标系中,只看x轴时,如果点(3,0),它的长度是3,那么它的单位化为
    x/len=3/3=1,是它的单位化
    向量与它不同的地方在于,向量要看x,y两个轴。
    只看一个轴是单位向量为1,如果看两个轴时单位向量为0.707


    在对向量操作时,基本都是操作点,不会直接改变线,
    例如:想让向量旋转,利用向量的方法,只是利用公式计算出旋转后坐标点的位置,确定两点后,线还是要手动来画的!
    展开全文
  • 向量标准

    2019-10-06 02:29:15
    最近的几次碰到需要求单位向量的时候我都尽量避免,因为记忆里求法向量和标准化向量相当的麻烦 -_-" 不知道是源码结构好还是啥,感觉这个代码还是挺有启发的,以后矩阵算法可能得好好用起来了 转载于:...

     

    return *this /= length();

     

    比求模多一步而以!

    我已经对以前念书的时候是怎么计算单位向量没有印象了。

    最近的几次碰到需要求单位法向量的时候我都尽量避免,因为记忆里求法向量和标准化向量相当的麻烦 -_-"

    不知道是源码结构好还是啥,感觉这个代码还是挺有启发的,以后矩阵算法可能得好好用起来了

     

    转载于:https://www.cnblogs.com/ice-arrow/p/11551009.html

    展开全文
  • 二次型矩阵包含了旋转和拉伸两种变换,将其拆分为三个矩阵相乘的形式其进行规范只保留拉伸的部分去掉旋转的部分,其中旋转的部分是列向量单位向量并且是正交向量。 二次型矩阵,都是对称矩阵,所以特征值分解总...

     

    目录

     

    施密特正交化单位化目的:AA(转置)=E 得到Q(转置)=Q(逆);

    单位化,正交化目的;

    相似矩阵理解

    为什么特征向量构成P

    余子式和代数余子式;

    特征向量

    对角化;

    标准化;

    等价,相似,合同

    秩的理解

    特征值和特征向量理解

    二次型

    规范化


    施密特正交化单位化目的:AA(转置)=E 得到Q(转置)=Q(逆);


    施密特正交化就是把非正交基变为正交基的。

    (单位化,正交化)AAT=E;这是正交矩阵

    其中正交矩阵性质是其逆等于其转置;

    这样就能求由逆转置了:

    单位化,正交化目的;

    (单位化,正交化)AAT=E;这是正交矩阵,

    利用正交矩阵性质:其中正交矩阵性质是其逆等于其转置,求转置

    施密特正交化公式理解;

    向量内积:

     

    其中 表示一个向量在另一个向量上的投影,使用上面内积公式带入的到绿线;

    两个向量相减表示做垂线;你可以用向量(1,1)-(0,1) 进行体会;

    相似矩阵理解

    同样的,对于一个线性变换,只要你选定一组基,那么就可以找到一个矩阵来描述这个线性变换。换一组基,就得到一个不同的矩阵。所有这些矩阵都是这同一个线性变换的描述,但又都不是线性变换本身。

    但是这样的话,问题就来了如果你给我两张猪的照片,我怎么知道这两张照片上的是同一头猪呢?同样的,你给我两个矩阵,我怎么知道这两个矩阵是描述的同一个线性变换呢?如果是同一个线性变换的不同的矩阵描述,那就是本家兄弟了,见面不认识,岂不成了笑话。

    好在,我们可以找到同一个线性变换的矩阵兄弟们的一个性质,那就是:

    若矩阵A与B是同一个线性变换的两个不同的描述(之所以会不同,是因为选定了不同的基,也就是选定了不同的坐标系),则一定能找到一个非奇异矩阵P,使得A、B之间满足这样的关系:

    A = P-1BP

    线性代数稍微熟一点的读者一下就看出来,这就是相似矩阵的定义。没错,所谓相似矩阵,就是同一个线性变换的不同的描述矩阵。按照这个定义,同一头猪的不同角度的照片也可以成为相似照片。俗了一点,不过能让人明白。

    而在上面式子里那个矩阵P,其实就是A矩阵所基于的基与B矩阵所基于的基这两组基之间的一个变换关系。关于这个结论,可以用一种非常直觉的方法来证明(而不是一般教科书上那种形式上的证明),

    https://blog.csdn.net/frothmoon/article/details/99551072 

    其中A = P-1(A对角化)P     A对角化:特征值   P-1,p:特征向量构成的矩阵, 注意:保证特征值和特征向量 一一对应。

    为什么特征向量构成P

    余子式和代数余子式:

    划去元素所在行和列的行列式,代数余子式有  正负号余子式没有正负

    伴随矩阵就是代数余子式组成的。

    矩阵的逆和伴随之间查一个系数,就是矩阵值的倒数。这个性质用来求逆。逆就理解成矩阵的除法。

    矩阵的转置就是关于y=x对称的坐标系,把矩阵理解成基坐标系,就行了。  

    如果:AA'=E(E为单位矩阵,A'表示“矩阵A的转置”。)则n阶实矩阵A称为正交矩阵
    性质:
    1. 方阵A正交的充要条件是A的行(列) 向量组是单位正交向量组;
    2. 方阵A正交的充要条件是A的n个行(列)向量是n维向量空间的一组标准正交基;
    3. A是正交矩阵充要条件是:A的行向量组两两正交且都是单位向量;
    4. A的列向量组也是正交单位向量组。

    特征向量

    就是基坐标,特征值就是长度,相乘等于Ax,很好理解。

    对角化

    就是特征值在主对角线上。

    标准化

    当方程式2次的时候,一次项对图像的影响很小,不大会改变图像基本的形状。我们可以利用一次项进行图像的旋转和位置的 位移,对图像进行矫正的很规范的图像;

    https://www.matongxue.com/madocs/271.html

     

    等价,相似,合同

    秩的理解


    矩阵的秩:矩阵中所有行向量中极大线性无关组的元素个数。
    秩:是图像经过矩阵变换之后的矩阵维度
    秩:列空间的维度,行空间的维度,行秩与列秩相等
    可以理解为图像所包含的信息的丰富程度。不严谨的讲,低秩表征一种冗余程度。秩越低表示数据冗余性越大,因为用很少几个基就可以表达所有数据了。相反,秩越大表示数据冗余性越小。

    特征值和特征向量理解


    将特征向量当做一个普通的向量,使用很多个矩阵和它相乘,做乘法之后方向不变的那个矩阵的特征向量就是这个矩阵的特征向量,大小的变动就是特征值。
    特征向量其实是个方向,特征值其实是个大小,特征向量所在直线上的向量都是特征向量
    特征值分解可以认为:

    有一个,首先左乘一个正交阵变为标准基,然后乘一个对角阵做伸缩变换,然后再乘一个正交阵变回去
    矩阵特征值是对特征向量进行伸缩和旋转程度的度量,实数是只进行伸缩,虚数是只进行旋转复数就是有伸缩有旋转。

     

     

     

    二次型

    对于一个若此函数,其中的一次项只能对函数图形继续拧放缩和位移,不会改变其形状,常数项更不会改变;

    举例: y=x^2和

    y=x^2+x

    , y=x^2+1


    通过矩阵来研究二次函数(方程),这就是线性代数中二次型的重点。对于二次函数或者二次方程,二次部分是主要部分,往往研究二次这部分就够了。

    在线代里面,就是通过一个对称矩阵,去研究某个二次型。
    对称矩阵⇔二次型矩阵⇔二次型 
    一个平面在圆锥体上运动,可以得到圆、椭圆、双曲线,这也是它们之间具有线性关系的来源

    二次型理解:https://www.zhihu.com/question/38902714

    规范化

    指比如一个椭圆看起来有点歪,不太好处理,我们将它扶正。
    二次型矩阵包含了旋转和拉伸两种变换,将其拆分为三个矩阵相乘的形式对其进行规范化只保留拉伸的部分去掉旋转的部分,其中旋转的部分是列向量单位向量并且是正交向量。
    二次型矩阵,都是对称矩阵,所以特征值分解总可以得到正交矩阵与对角矩阵。
    正定:特征值大于0

    展开全文
  • 矩阵可逆的条件: 1 秩等于行数 2 行列式不为0,即|A|≠0 3 行向量(或列向量)是线性无关组 4 存在一个矩阵,与它的乘积是单位阵 5 齐次线性方程组AX=0 仅有...特征值、特征向量与可条件: 定义:设A 是数域F
  • 2、词向量-->单位向量 2.1、原理 2.2、极简代码 3、词向量+TFIDF 3.1、原理 3.2、极简代码 3.3、引入TFIDF前后可视对比 4、降维 4.1、降到二维并可视 4.2、降到三维并可视 训练后的词向量,引入预设词性特征...
  • 编程思路为:将三个节点编号为1、2、3,通过1、2节点创建第一个向量,通过1、3或2、3节点创建第二个向量,将这两个向量叉乘即可得到平面的法向量,然后向量进行单位化即可。向量的操作需要用到Hyperworks math...
  • 今天晚上王小民同学问了助教姐姐一个问题,为什么一个一般的矩阵角化的时候,我们不用做正交单位化实对称矩阵角化的时候却要做呢?这是一个很好的问题,所以和大家分享一下。 最后的结论就是...
  • 向量单位化之后,向量的模等于1。 实现单位化只需要各元素除以向量的模,单位化后内积为1。 归一化 就是将训练集中某一列数值特征(假设是第i列)的值缩放到0和1之间。 标准化 就是将训练集中某一列数值特征(假设...
  • 在Matlab中不用eig()命令求方阵的特征值和特征向量矩阵,并判断其是否可以 #本文仅针对标题所示问题的代码解答,若相关概念不熟,请去资料。 #不要问我为什么放着好好的eig()命令不用,反而去写一堆代码。这得...
  • 在学习linear regression时经常处理的数据一般多是矩阵或者n维向量的数据形式,所以必须矩阵有一定的认识基础。numpy中创建单位矩阵借助identity()函数。更为准确的说,此函数创建的是一个n*n的单位数组,返回值的...
  • 使用它们可以定义一个空间向量/点,实现向量的平移,缩放和旋转等,使用相关函数还可以实现两向量的叉乘,得到一个向量的绝对长度,将一个向量单位化,得到一个三点决定的平面的垂直向量(经过单位化),得到空间中两点的距离...
  • 向量学习总结

    千次阅读 2018-08-21 17:12:56
    向量又称词嵌入,是自然语言处理过程中“基本单位”词的一种数学表示,生成词向量的方法有神经网络,单词共生矩阵的降维,语言概率模型等。 词向量的表示 离散表示(one-hot representation) 传统的基于...
  • normalized:对向量进行单位化(向量方向不变,长度变为1) SqrMagnitude:取得向量长度(还未平方根的长度),用于比较两个向量的长度 Equals:判断两个向量是否相等(x轴、y轴的值相等),bool的返回值 Normalize...
  • 一般矩阵的相似角化用它的特征向量组成的矩阵就可以了,为什么实对称矩阵的相似角化这么特殊呢,名称叫做正交矩阵化,求得特征向量矩阵后还要正交化和单位化使之成为正交矩阵呢? 答: 对称矩阵也可以用一般的由...
  • 游戏开发中的向量数学介绍坐标系(2D)向量运算会员访问添加向量标量乘法实际应用运动指向目标单位向量正常反射点积面对叉积计算法线指向目标 介绍 本教程是线性代数的简短实用介绍,因为它适用于游戏开发。线性...
  • 文章目录numpy计算矩阵特征值,特征向量一、示例:二、numpy实现: numpy计算矩阵特征值,特征向量 ...我们可以进一步特征向量进行单位化单位化之后的结果如下: 特征值为1对应的特征向量为 [...
  • 实对称矩阵的相似

    千次阅读 2020-05-18 10:11:28
    每个元素都为实数的角矩阵称为实对称矩阵,实对称矩阵必定相似于一个角矩阵(角线以外的元素全为0的矩阵),即存在可逆矩阵P,使得,且存在正交矩阵Q,使得 ...4.将所有正交的特征向量单位化 5.将n个
  • 相似与二次型的标准联系

    千次阅读 2019-09-27 16:39:29
    4、改造特征向量(单位化、Schmidt正交化)γ1,γ2,…,γn 5、构造正交矩阵P=(γ1,γ2,…,γn) 则经过坐标变换x=Py,得 xTAx=yTBy=λ1y1²+λ2y2²+…+λnyn² 相似角化,具体解题步骤: 1、求矩阵A的特...
  • 文本表示+向量空间模型

    千次阅读 2017-10-11 15:28:24
    因此,在预处理阶段,将文本转化为更易计算机识别的信息,即文本进行形式处理。 模型:向量空间模型;概率模型;概念模型; 向量空间模型 1、主要步骤 (1)将文本的基本语言单位(字、词、词组、短语)抽取...
  • 游戏引擎学习笔记之数学知识 向量篇 ...1.确定玩家追击的方向 公式 dir = (V0 - V1).Normalized 该方法将玩家追击怪物的方向单位化,方向没有大小,所以其进行单位化操作。 2.移动 公式 V1 = ...
  • 研究矩阵,主要研究简单矩阵,简单到能变成单位阵E的矩阵,不管是通过用正交阵来对称阵,还是单独研究简单矩阵,全是挑软柿子捏,人类的认识过程也同样遵循此道理。用导图做个总结对比。 ...
  • 文章目录题目解答过程1、求 A 的特征值2、求 A 的特征向量3、将特征向量正交单位化4、计算 U−1U^{-1}U−15、计算角化矩阵 题目 将下列矩阵角化 A=[0000002002000000]\begin{aligned} A&=\left[\begin{array...
  • GLM库从0.9.9版本起,默认会将矩阵类型初始化为一个零矩阵(所有元素均为0),而不是单位矩阵(角元素为1,其它元素为0)。如果你使用的是0.9.9或0.9.9以上的版本,你需要将所有的矩阵初始改为glm::mat4 mat = ...
  • 这里之所以要将超平面定为1和-1,是因为这是一个标量,通过同时扩大或缩小w和b就能实现单位化。 可以构造拉格朗日函数,转化为对偶问题求解。 位于超平面H1、H2上的训练样本点成为支持向量。 接下来是线性不可分的...
  • 一、实对称矩阵 实对称矩阵的几点性质: 1.特征值必是实数 2.不同特征值的特征向量必正交 3.必与角矩阵相似 4.一定可以用正交矩阵相似角化(满足的矩阵为正交阵),步骤如下... 如λi≠λj 只需要单位化 ...
  • 一 算法原理 ...雅可比方法用平面旋转矩阵AAA做相似变换,AAA为角阵,从而求解出特征值和特征向量.旋转矩阵UpqU_p{_q}Up​q​,是一个单位阵在第ppp行,第ppp列,第qqq行,第qqq列,元素为cosφcos\varphico
  • 点云cell的特征向量和特征值分析

    千次阅读 2019-01-05 15:22:22
    在ndt中会定义一个ndtcell的尺寸,初始时会计算每个cell的中的均值mean和方差cov。 有了均值和方差以后就可以计算特征向量和特征值。 这儿获得的33的特征向量和31的特征值,分别代表旋转和每个轴的分布离散情况。 ...
  • 1.标量:有大小,没方向。...5.向量的标准、归一、正规:把向量变为单位向量的过程。 6.加法 a(x1,y1) b(x2,y2) a + b = (x1 + x2 , y1 + y2) (平行四边形角线) 7.减法 a(x1...
  • 实对称矩阵必可正交相似

    千次阅读 2020-05-22 11:35:02
    k重特征值对应的k个特征向量可以施密特正交得到新的k个特征向量,而依然对应同一个特征值;不同特征值的对应特征向量一定正交。而特征向量乘以常数依然对应同一个特征值,从而可以使n个特征向量单位向量且两两...

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 221
精华内容 88
关键字:

对向量单位化