精华内容
下载资源
问答
  • 向量的单位是指,将向量的每个元素除以向量的模(2-范数),使得向量的模(2-范数)变为1.在机器学习、压缩感知、稀疏表现等方面,经常需要对矩阵的每个列向量进行单位化。下面对各种列向量单位化的MATLAB代码进行比较...

    向量的单位化是指,将向量的每个元素除以向量的模(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
    展开全文
  • 向量的

    2020-12-05 16:24:27
    向量的积 ...而n一个与a、b所在平面均垂直的单位矢量。 右手法则:当右手的四a以不超过180度的转角转向b时,竖起的大拇指指向c的方向。 i x j = k , j x k = i , k x i = j a = a1i + a2j + a
    1. 向量积,也被称为叉积(即交叉乘积),是一种在向量空间中向量的二元运算。与点积不同,它的运算结果是一个伪向量而不是一个标量。并且两个向量的叉积与这两个向量都垂直。
    2. 定义:在这里插入图片描述
      在这里θ表示’a和b之间的角度(0° ≤ θ ≤ 180°),它位于这两个矢量所定义的平面上。而n是一个与a、b所在平面均垂直的单位矢量。
      右手法则:当右手的四指从a以不超过180度的转角转向b时,竖起的大拇指指向是c的方向。
    3. i x j = k , j x k = i , k x i = j
    4. a = a1i + a2j + a3k = [a1, a2, a3]
      b = b1i + b2j + b3k = [b1, b2, b3]
      a × b = [a2b3 − a3b2, a1b3 − a3b1, a1b2 − a2b1]
    展开全文
  • 非零向量a与三条坐标轴的夹角 称为向量a的方向角,设向量a= ,则 , , ,得 , 称为向量a的方向余弦,以向量a的方向余弦为坐标的向量就是与a同方向的单位向量 ,并由此得 加以推广,两个向量之间的方向余弦这两个...

    6c08fbffa7188b30fc2a42ec90dd7aa6.png

    非零向量a与三条坐标轴的夹角

    称为向量
    a的方向角,设向量a=
    ,则
    ,
    ,
    ,得
    ,
    称为向量
    a的方向余弦,以向量a的方向余弦为坐标的向量就是与a同方向的单位向量
    ,并由此得

    6a280031a3ce500e275dbcdd5f2c7003.png

    加以推广,两个向量之间的方向余弦指的是这两个向量之间的角度的余弦。“方向余弦矩阵”是由两组不同的标准正交基的基底向量之间的方向余弦所形成的矩阵。方向余弦矩阵可以用来表达一组标准正交基与另一组标准正交基之间的关系,也可以用来表达一个向量对于另一组标准正交基的方向余弦。

    下面先从空间直线的点法式方程,对称式方程和参数方程说起,通过方向向量与直线平行建立直线的参数方程,

    675393df5b534ee15acbb71a59140f30.png

    1fb7121431a8d54a0de9ceff80b610ed.png

    29a23b59e073fdcda5bdaf6fddd28e48.png

    6cc47fb87d9c0a14cc7d6f5f30ae049d.png

    同样,空间曲线的切线与法平面方程也如此建立,不过需要先知道向量值函数的导向量的几何意义,

    4c9a68c0f9aa3bf084cae22923811a09.png

    52bbc4cb20d3fabd0b1deda786e6713b.png

    e38cd3c87119a8c8d04d25586c8221f2.png

    d3a1c8d9220a65e85f5a7e2788ac89e2.png

    由以上基础知识,接下来便可以推出曲面的切平面与法线方程,

    1980df29af1ebd1ce0f356345ac04410.png

    e982d5ae49a196db8672b5f90dfa3766.png

    419ea3cf05ecd6f9df40dc9ff226a818.png

    ed88c423170e6ddeda42e3a04c8e508c.png

    f478a070b3be3602ad0a42a8ed9ee99c.png

    最后方向余弦的分子与法向量的符号相反,因为我们规定了法向量向上,而给出的法向量向下,所以符号相反。

    如何求一个曲面的面积呢?这就要需要用到切平面的知识和方向余弦

    d1fd50566a3b46c34ba09aa43dff14e8.png

    e8c9fc8416a06c42c32688f4172f73b5.png

    7f31ba39482eb2f28aedc6bb4aaa96c9.png

    bf6b708a65de8cca397a8564948fbc23.png

    24f24ca92bb291933e266ef22f58dadc.png

    国外教材

    84ccb0166616b97a415077d52b268009.png

    5d6e5abda9d9bee411bcd356b18f4da0.png

    0591779d8635917c3eea345b1ff8b9e2.png

    有了曲面的各方面基础知识,便可以进行对面积的曲面积分进行计算,

    121d01b45e4625b931d118651b4d0688.png

    4f0792dbc4d4987b6fc0d744a282acd4.png

    2086490ca264866151e943f581539349.png

    2a4668e272d0b47a3dd53651d78f90de.png

    6585bd19716fbfc396469012dbf0b6af.png

    715694dcfec940b0691f2e2a9c20f38d.png

    fb05c4f2fe5e4ecb05f989ada8e8e60d.png

    904d00def730a3e0342a8e1003c6a795.png

    34f27768639196ca99bd0d090a9b398b.png

    0f6fa9b3abe4e1a36f18e1ffbcf39f62.png

    fa8b02a4a143830e4d58863c7599b7f2.png

    bb1d3128162801b10e97577d96f07fe1.png

    9a89af6ff8d7bbb64a5f140f0de4d355.png

    73680ddfd55342d953ed0aa8f4946f62.png

    3c59e95af7c0f5c6e08208e354f1da85.png

    1da0644dbff3dcdbdef35ffac2804387.png

    73a7be0f5ad316a02ceb85558dd0a532.png

    2333b158a0f81b09e0dda9b9d1ae7adf.png

    95af98a8476c8d16e434d43998ae891e.png

    dd8658c0bddaaae4698e65d89ed968e4.png

    88b983a4dc9187118e2b1d7d21cdafed.png
    展开全文
  • 向量空间距离

    2011-11-01 15:06:47
    用D(Document)表示,特征项(Term,用t表示)是指出现在文档D中且能够代表该文档内容基本语言单位,主要是由词或者短语构成,文本可以用特征项集表示为D(T1,T2,…,Tn),其中Tk是特征项,1&lt;=k&lt;=...


    在向量空间模型中,文本泛指各种机器可读的记录。用D(Document)表示,特征项(Term,用t表示)是指出现在文档D中且能够代表该文档内容的基本语言单位,主要是由词或者短语构成,文本可以用特征项集表示为D(T1,T2,…,Tn),其中Tk是特征项,1<=k<=N。例如一篇文档中有a、b、c、d四个特征项,那么这篇文档就可以表示为D(a,b,c,d)。对含有n个特征项的文本而言,通常会给每个特征项赋予一定的权重表示其重要程度。即D=D(T1,W1;T2,W2;…,Tn,Wn),简记为D=D(W1,W2,…,Wn),我们把它叫做文本D的向量表示。其中Wk是Tk的权重,1<=k<=N。在上面那个例子中,假设a、b、c、d的权重分别为30,20,20,10,那么该文本的向量表示为D(30,20,20,10)。在向量空间模型中,两个文本D1和D2之间的内容相关度Sim(D1,D2)常用向量之间夹角的余弦值表示,公式为:

    其中,W1k、W2k分别表示文本D1和D2第K个特征项的权值,1<=k<=N。
    在自动归类中,我们可以利用类似的方法来计算待归类文档和某类目的相关度。例如文本D1的特征项为a,b,c,d,权值分别为30,20,20,10,类目C1的特征项为a,c,d,e,权值分别为40,30,20,10,则D1的向量表示为D1(30,20,20,10,0),C1的向量表示为C1(40,0,30,20,10),则根据上式计算出来的文本D1与类目C1相关度是0.86

    那个相关度0.86是怎么算出来的? 


    是这样的,抛开你的前面的赘述

    在数学当中,n维向量是 V{v1, v2, v3, ..., vn}
    他的模: |v| = sqrt ( v1*v1 + v2*v2 + ... + vn*vn )
    两个向量的点击 m*n = n1*m1 + n2*m2 + ...... + nn*mn
    相似度 = (m*n) /(|m|*|n|)
    物理意义就是两个向量的空间夹角的余弦数值
    对于你的例子
    d1*c1 = 30*40 + 20*0 + 20*30 + 10*20 + 0*10 = 2000
    |d1| = sqrt(30*30 +20*20 + 20*20 + 10*10 + 0*0) = sqrt(1800)
    |c1| = sqrt(40*40 + 0*0 + 30*30 + 20*20 + 10*10) = sqrt(3000)
    相似度 = d1*c1/(|d1|*|c1|)= 2000/sqrt(1800*3000)= 0.86066

     

    展开全文
  • 用D(Document)表示,特征项(Term,用t表示)是指出现在文档D中且能够代表该文档内容基本语言单位,主要是由词或者短语构成,文本可以用特征项集表示为D(T1,T2,…,Tn),其中Tk是特征项,1&lt;=k&lt;=...
  • 向量具有大小和方向的量,一般记做:a ,,,同时...向量的大小,也就是向量的长度(一般称作为 模),向量a的模记为:,若,则 单位向量:即模为1的向量 零向量:即模为0的向量,零向量的方向任意的 ...
  • 向量与行列式笔记

    2020-01-12 22:56:26
    向量是指具有大小和方向量,在物理学中,通常将向量称为矢量 标量是指只有大小量,在物理学中,也叫做标量 箭头方向表示向量方向,线段则表示向量大小 向量众多特性可以是很多概念得到简化 一,向量 1...
  • 特征值与特征向量概念

    千次阅读 2011-03-10 13:43:00
    特徵向量代表一个正规正交(orthonormal) 向量组,所谓正规正交向量,是指这向量与自身做 内积值为一单位向量;在几何关系上是指二量相互垂直且此其内积值再做正规化(normalization)。 上式也可改写为 其中 I ...
  • 用D(Document)表示,特征项(Term,用t表示)是指出现在文档D中且能够代表该文档内容基本语言单位,主要是由词或者短语构成,文本可以用特征项集表示为D(T1,T2,…,Tn),其中Tk是特征项,1<=k<=N。例如...
  • 矩阵相关知识 两个向量正交是指它们的内积等于0,两个向量的内积是它们对应分量的乘积之和 正交矩阵定义: ...3)A的各行是单位向量且两两正交 4)A的各列是单位向量且两两正交 5)(Ax,Ay)=(x,y) x,y∈R ...
  • 意为:a向量的单位向量=a向量/a向量的长度(a向量的单位向量a向量方向相同并且长度为一的向量)。 图形学中,单位向量(也叫a hat)一般都用来 只表示一个方向 的。 转置矩阵:相当于将x轴y轴互换 向量的...
  • 光滑,可微流形,指的是领域和欧式空间同构线性空间,也就是李群每个元素存在线性空间或者向量空间作为切空间。由于单位元在群中特殊地位,所以李群单位切空间李代数在李群非常重要概念。 切空间...
  • 这一章更像一个...单位向量指长度为1向量;0向量长度为0,方向未定义。 1.1 向量操作 向量相加遵循平行四边形法则,具有交换性。 下面列出虎书里提到几条向量操作等式: a + b = b + a b - a = -a + b a.
  • 线性代数学习笔记7

    2016-11-27 16:43:36
    通常情况下,如果特征值互不相同,那么每个特征值特征向量是在一条线上(特征向量空间是一维),那些线是垂直。但是如果特征值重复,那就有一整个平面特征向量,在那个平面上,我们可以选择垂直向量(比如...
  • 生成子空间:一组向量的生成子空间原始向量线性组合后所能抵达的点的集合(确定Ax=b是否有解,相当于确定向量b是否在A的向量的生成子空间中) 线性相关,线性无关(一个列向量线性相关的矩阵称为一个奇异矩阵...
  • 具体而言,向量是指相同指令在硬件向量处理单元上对多个数据流进行操作。这些硬件向量处理单元也被称为SIMD单元。 补充: CPU在单位时间内(同一时间)能一次处理二进制数位数称为字长。1字节是8位字长。 ...
  • 矩阵

    2020-07-16 12:39:25
    Aij是指第i行,第j列元素。 二、向量 向量是一种特殊矩阵,如下图所示为四位列向量(4×1) 对于向量索引,一般采用1索引向量,如下图所示。 三、矩阵加法 四、矩阵乘法 1. 2. 矩阵乘法性质: 1.矩阵...
  • 2、数据分析线代篇

    2021-02-27 12:48:44
    有监督回归一个基础: 单位矩阵:乘任何矩阵都其任何矩阵本身。 阶梯矩阵:主对角线一边所有向量全为零,从而其行列式为主对角线所有向量相乘 齐次线性方程组:常数项...有没有零解指的是x的向量是不是都等0
  • 提取视截面

    千次阅读 2004-10-31 19:50:00
    A,B,C组成的向量(A,B,C)等于平面的单位向量,则|D|表示原点到此平面的距离。若D>0,则原点位于平面的正面(法向量的一面);若D这样,用一个四维向量可以很方便的表示一个平面:缩写记号来表示满足方程NQ+D=0...
  • 推荐系统学习笔记

    2019-06-09 00:39:18
    欧几里得度量(euclidean metric)(也称欧氏距离)一个通常采用距离定义,在m维空间中两个点之间真实距离,或者向量的自然长度(即该点到原点距离)。在二维和三维空间中欧氏距离就是两点之间实际...
  • 第1 页共27 页 1 概述 频率计基本原理用一个频率稳定...向量的值作为程序计数器高8 位,低8 位固定为00H,若引导向量为FCH, 则程序计数器内容为FC00H 即程序转到FC00H 地址开始执行而ISP 服务程序 就是从,FC00...
  • LINGO软件学习

    2009-08-08 22:36:50
    注意如果派生集B的父集另外的派生集A,那么上面所说的原始父集集A向前回溯到最终的原始集,其顺序保持不变,并且派生集A的过滤器对派生集B仍然有效。因此,派生集的索引个数最终原始父集的个数,索引的取值...
  • 1.叉积,u*v=|u|*|v|*sin(a)*n,n是单位法线向量,与u和v都垂直。2.虚数,i=sqrt(-1), i*i=-1。3.复数一个实数与虚数和。z=(a+b*i)4.四元数超复数。从数学上说,术语超复数可以任何东西,但通常有多个虚部
  • 研究生遗漏知识补充

    2018-09-10 18:58:45
    特征多项式:n级矩阵A的特征多项式就是λE-A的行列式,即|λE-A|,这里En级单位矩阵 特征值:令|λE-A|=0,解出λ的值即为特征值。求解的时候一般通过行列变换,让一行或一列里有只有一个不为0,再按不为0的...

空空如也

空空如也

1 2 3
收藏数 47
精华内容 18
关键字:

向量a的单位向量是指