精华内容
下载资源
问答
  • 一个列向量乘以一个行向量,常规思路np.dot(a.T,a),就是a和它的转置相乘,先看一下a.T长啥样: 这里发现a和a.T形状竟然一样,都(3,) 看一下计算结果: 本来以为一个3*3的矩阵,结果一个数...

    平时在学习使用numpy库时,会遇到一种情况,假如说我想计算一个列向量乘以一个行向量的结果,我们的思路大概是这样:
    首先创建一个数组,里面包含3个数字,查看一下数据和数据的形状:
    在这里插入图片描述
    一个列向量乘以一个行向量,常规思路是np.dot(a.T,a),就是a和它的转置相乘,先看一下a.T长啥样:
    在这里插入图片描述
    这里发现a和a.T形状竟然一样,都是(3,)
    看一下计算结果:
    在这里插入图片描述
    本来以为是一个3*3的矩阵,结果是一个数。
    原因就出现在a.T的形状,这里需要注意,不要把numpy的数组错理解为向量。
    要实现我们想要的效果,我们只需要做一点小小的改动:将第一行代码修改为a = np.random.randn(1,3)
    看一下结果:
    在这里插入图片描述

    展开全文
  • 行主序矩阵内存布局:列主序矩阵内存布局:行向量和列向量行向量指的是把向量当成一个一行n列矩阵,列向量的是把向量当成一个n行一列矩阵。左乘和右乘矩阵“左乘”:矩阵和向量相乘时放在左边。矩阵“右乘”:...

    看龙书的时候发现一个矩阵在传入Shader之前都要转置一下,很好奇为什么要有一步这样的操作。

    58501616a4969f2c9ed339250b79ae39.png

    行主序和列主序

    行主序指矩阵在内存中逐行存储,列主序指矩阵在内存中逐列存储。

    行主序矩阵内存布局:

    a135057c31fba1c71879ae6adf30bf92.png

    列主序矩阵内存布局:

    fe0b118d28cab4773bf54fbf005f2a35.png

    行向量和列向量

    行向量指的是把向量当成一个一行n列的矩阵,列向量指的是把向量当成一个n行一列的矩阵。

    左乘和右乘

    矩阵“左乘”:矩阵和向量相乘时放在左边。

    矩阵“右乘”:矩阵和向量相乘时放在右边。

    对于同一个矩阵和同一个向量,“左乘”和“右乘”的结果是不一样的,这是因为矩阵不满足交换律。

    总结

    HLSL中默认是使用列主序存储矩阵的,也就是矩阵的每一列存储在一个常量寄存器中,此时使用矩阵“右乘”效率更高,因为一个float4和一个4x4的矩阵相乘只需要四个点乘就能计算出结果:

    12046f4fe35749d6a8be1fe988bc3dbf.png

    如果使用“左乘”,结果就是:

    88cb7ed2ec484da9381882cf6ba80452.png

    HLSL中可以通过 #pragmapack_matrix指令或者row_majorcolumn_major keyword来修改矩阵的存储方式。在Shader执行之前会加载矩阵的数据,行主序还是列主序的设置只会影响Shader读取输入的矩阵数据矩阵读取到Shader后矩阵是行主序还是列主序就不会有其他影响(只会影响计算的效率),比如通过代码获取某个元素的值,我们要获取第一行第三列的值,都是通过_m02来获取。

    但是为了使效率最高,对于列主序存储的矩阵我们要“右乘”,对于行主序存储的矩阵我们要“左乘”。

    因为DirectXMath中使用行主序矩阵,向量和矩阵相乘使用“左乘”,要想在Shader中读取正确的矩阵,我们就要转置一下,比如一个平移变换,在DirectXMath中是这样:

    4c42b242b11b48b5eddaa31ecb68612f.png

    矩阵“左乘”表示平移变换:

    55ae3e6488b64ad9f7884a1ae8800e0a.png

    那在HLSL中使用的是列主序矩阵,为了效率我们使用“右乘”,要表示相同的平移变换,就要传入上面矩阵的转置矩阵:

    cbb177264424104391783f874073f477.png

    所以在把DirectXMath的矩阵传入HLSL时需要传入原矩阵的转置。

    Reference:

    https://docs.microsoft.com/zh-cn/windows/win32/direct3dhlsl/dx-graphics-hlsl-per-component-math?redirectedfrom=MSDNdocs.microsoft.comHLSL mul() and row/column major matricies in directxwww.gamedev.net
    展开全文
  • 列向量生成N列每列相同矩阵 函数法 a=[1 ;2;3;4]; b=repmat(a,1,N); 线性代数法 clear all; a=[1 2 3 4]; b=[a',zeros(4,3)]; c=b*ones(4,4); 如果行向量转置一下就好了 推荐用第二种方法,别问为...

    将列向量生成N列每列相同的矩阵


    函数法


    a=[1 ;2;3;4];
    b=repmat(a,1,N);


    线性代数法


    clear all;
    a=[1 2 3 4];
    b=[a',zeros(4,3)];
    c=b*ones(4,4);
     

    如果是行向量转置一下就好了

    推荐用第二种方法,别问为什么,问就是比较帅

    展开全文
  • 行主序矩阵内存布局:列主序矩阵内存布局:行向量和列向量行向量指的是把向量当成一个一行n列矩阵,列向量的是把向量当成一个n行一列矩阵。左乘和右乘矩阵“左乘”:矩阵和向量相乘时放在左边。矩阵“右乘”:...

    看龙书的时候发现一个矩阵在传入Shader之前都要转置一下,很好奇为什么要有一步这样的操作。

    39fde6eecaa8d9d2e7cf114e05d38c2c.png

    行主序和列主序

    行主序指矩阵在内存中逐行存储,列主序指矩阵在内存中逐列存储。

    行主序矩阵内存布局:

    3c9d3f49ad3bc6feb1142e02e3d99aba.png

    列主序矩阵内存布局:

    142d7898f9ddc291c4e68b4920dfa3fd.png

    行向量和列向量

    行向量指的是把向量当成一个一行n列的矩阵,列向量指的是把向量当成一个n行一列的矩阵。

    左乘和右乘

    矩阵“左乘”:矩阵和向量相乘时放在左边。

    矩阵“右乘”:矩阵和向量相乘时放在右边。

    对于同一个矩阵和同一个向量,“左乘”和“右乘”的结果是不一样的,这是因为矩阵不满足交换律。

    总结

    HLSL中默认是使用列主序存储矩阵的,也就是矩阵的每一列存储在一个常量寄存器中,此时使用矩阵“右乘”效率更高,因为一个float4和一个4x4的矩阵相乘只需要四个点乘就能计算出结果:

    5569972d849be4c96fa6fa2b310e4ac9.png

    如果使用“左乘”,结果就是:

    ff5b51278fb60e81abdd7727a59d8f86.png

    HLSL中可以通过 #pragmapack_matrix指令或者row_majorcolumn_major keyword来修改矩阵的存储方式。在Shader执行之前会加载矩阵的数据,行主序还是列主序的设置只会影响Shader读取输入的矩阵数据矩阵读取到Shader后矩阵是行主序还是列主序就不会有其他影响(只会影响计算的效率),比如通过代码获取某个元素的值,我们要获取第一行第三列的值,都是通过_m02来获取。

    但是为了使效率最高,对于列主序存储的矩阵我们要“右乘”,对于行主序存储的矩阵我们要“左乘”。

    因为DirectXMath中使用行主序矩阵,向量和矩阵相乘使用“左乘”,要想在Shader中读取正确的矩阵,我们就要转置一下,比如一个平移变换,在DirectXMath中是这样:

    959db11d30534f012d702a1f9e806584.png

    矩阵“左乘”表示平移变换:

    cc28286c69085965470114353d66d91b.png

    那在HLSL中使用的是列主序矩阵,为了效率我们使用“右乘”,要表示相同的平移变换,就要传入上面矩阵的转置矩阵:

    3b1ae58f502346013348d0b21ef86147.png

    所以在把DirectXMath的矩阵传入HLSL时需要传入原矩阵的转置。

    Reference:

    https://docs.microsoft.com/zh-cn/windows/win32/direct3dhlsl/dx-graphics-hlsl-per-component-math?redirectedfrom=MSDNdocs.microsoft.comHLSL mul() and row/column major matricies in directxwww.gamedev.net
    展开全文
  • 我将两个矩阵的一行提取出来想对一个行向量转置之后进行列向量乘以行向量的运算(别问为什么不直接进行矩阵运算,因为这一步还有别的运算步骤我当前只能这样)。 解决办法 使用reshape方法将一个一维向量转变成一个n...
  • 知道什么是矩阵和向量 知道矩阵加法,乘法 知道矩阵逆和转置 应用np.matmul、np.dot实现矩阵运算 1矩阵和向量 1.1矩阵 矩阵,英文matrix,和array区别矩阵必须2维,但是array可以多维. 如图:这个3x2...
  • 如下图:17*4列表同理,“向量”式列表见下图:68*1列表这种转置用图来表示这样:就是把每一行都转置成一,最后汇成一个68*1列表。这看起来容易,做起来难。因为按照excel常规操作,每一行转成一列的操作...
  • 原题其实U的正交补由A的转置列向量张成的,当然A的转置列向量就是A的行向量。我当时在想,为什么不是由A的列向量张成的? 你看解空间U,而AX=0这不就相当于正交吗?所以A的列向量张成的空间不应该就是U的...
  • 学好线性代数矩阵论需要不是逻辑...首先矩阵×向量有一种内存小记法:上式aA的列向量向量x元素(标量)。式(a)左边上式乘积对角元素为式(a)右边得证。正定矩阵,其中为可逆矩阵(nonsingular,行...
  • 对称时候,有什么特殊呢?1. 对称矩阵分解如果对称矩阵,也就是。对比以上两个式子,我们可以得到,也就是,特征向量矩阵正交。对称矩阵具有如下性质:它们特征值都实数;可以选取出一组标准...
  • 【3】向量一个特殊矩阵,讲义中一般都是列向量,如: 【4】如下图为1索引向量和0索引向量,左图为1索引向量,右图为0索引向量,一般我们用1索引向量。 注意:大部分矩阵都大写字母来表示,用小写字母来表示数字...
  • 虽然说学过微积分理论上就能推导出矩阵求导法则,但是矩阵求导的确很麻烦,...标量对向量求导(Scalar-by-vector)标量 y 对 向量 求导写作: 这里可能会让人疑惑,为什么上面是列向量而这里则行向量。这矩...
  • 一、矩阵1、系数矩阵前面学习了矩阵...下面出一些矩阵转置常用公式这些都没有什么好说,都比较好理解,要注意的是就是最后一个公式前后顺序不同。3、对称矩阵如果满足$A^{T}=A$,那么A就是对称矩阵4、...
  • 空间正交和向量投影

    2016-06-06 23:26:00
    4个子空间: 行空间,0空间 空间,A转置的0空间。 什么是正交向量?两个向量夹角90度。 直角意味着:x + y 所得到向量 = x + y |x|^2 + |y|^2 = |x+y|^2 怎么证明呢? x’*x + y’*y = (x+y)’*(x+y) = (x’...
  • matlab A=(:,1) 和 T =(:,:,1)是什么意思?

    万次阅读 多人点赞 2019-02-15 16:08:18
    因此,A(:,1)就表示A的第1列的所有元素,这一个列向量。 矩阵A右上角加一短撇(’)即A’表示A的转置矩阵——交换A的行列位置(当A为复数矩阵,共轭转置),因此A(:,1)'表示将矩阵A的第一列转置,最终就得到了一...
  • 如下图:17*4列表同理,“向量”式列表见下图:68*1列表这种转置用图来表示这样:就是把每一行都转置成一,最后汇成一个68*1列表。这看起来容易,做起来难。因为按照excel常规操作,每一行转成一列的操作...
  • 【转】gl_NormalMatrix

    2019-10-18 22:21:00
    关于为什么对法线变换时要使用变换矩阵的转置的逆,而不能像变换顶点那样直接使用变换矩阵 ...同时也遵守:向量默认为列向量,列向量的转置为行向量,行向量乘列向量为一个数值等价于二者的DOT ...
  • 在使用Eigen库时,我们阅读源码时候可能看到在输出...这里p2.transpose()其实使用转置矩阵意思 从打印效果来看就知道为什么这么写: 可以看到列向量显示占了很多行,看起来不舒服 如果对你有帮助,希望老铁
  • MIT线性代数笔记一 行图像和图像

    千次阅读 多人点赞 2019-03-20 21:02:54
    再到后来的矩阵的各种运算(加法、乘法、求逆、转置)、初等行变换,直到最后的特征值和特征向量的求解。一路以来,除了运算就是运算,但却并不知道为什么要这样算。当时就提出一个小疑问,难度线性代数学的就是各种...
  • 旋转矩阵与四元数理解

    千次阅读 2019-01-11 10:32:19
    并且任意两个列向量或者任意两个行向量都是正交。 2. 矩阵行列式为1。矩阵逆和转置是相等。  什么是旋转矩阵?如图1所示,我们假设最开始空间坐标系,,就是笛卡尔坐标系,这样我们得到空间A矩阵={,...
  • Re:关于变换矩阵行列性

    千次阅读 2011-10-25 12:52:45
    行列都没所谓,只要你应用层知道每行是什么意义,每列是什么意义,如果矩阵是行有意义,那就Matrix×Vector,vector理解为列向量,如果是列有意义矩阵,那就Vector×Matrix,那个被变换矩阵理解为行向量。...
  • 四个基本子空间

    2018-11-27 21:10:22
    列空间C(A)指各列向量的线性组合,得到的结果一个行为m(设矩阵m×n)的列向量,这也什么说它所在空间m维。 左零空间N(AT)直接字面意思在矩阵左侧乘以一个行向量,得到一个0向量。EA=0,E就是左零空间...
  • 矩阵求导法则

    2017-04-05 22:51:21
    方便话直接看百度文库那个,维基百科那个比较全(英文看头大),但是维基百科那个“Ax...不要看那个什么还有列向量列向量求导那个,网上很多都那个,但那个不对,我看底下评论也很多指出不对,说去看维基百科。
  • 当该坐标系中点写成列向量,乘以这个矩阵时候,就相当于对这个点做了一次到对应坐标系空间变换 坐标系中所有点,都可以表示为坐标轴线性组合 特殊矩阵 方阵 单位矩阵 逆矩阵 转置矩阵 正交矩阵 逆转置矩阵...
  • 示教器上NOA姿态表示方式:XYZ固定角坐标系表示方式(trotz( c) * troty(b) * trotx(a)),角度abc就是监视时候角度,求出来矩阵转置一下即为示教器上NOA表示方式,他们横向量矩阵的列向量。 有一个问题...
  • 旋转矩阵性质

    千次阅读 2019-05-15 13:43:38
    正交矩阵每一单位向量,并且两两正交。最简单的正交矩阵就是单位阵。 正交矩阵的逆(inverse)等于正交矩阵的转置(transpose)。同时可以推论出正交矩阵的行列式的值肯定为正负1的。 正交矩阵满足很多矩阵...
  • (秩:就是几维数组)他的转置和原数组看起来并没有什么区别,而且与原身相乘之后得到的一个数字,总之就是十分奇怪的计算方法。所以,我们要使用: a = np.random.randn(5,1) 来创建一个5行一的矩阵。 如果...
  • Numpy中矩阵运算

    2021-02-18 22:05:11
    知道什么是矩阵和向量 知道矩阵加法,乘法 知道矩阵逆和转置 应用np.matmul、np.dot实现矩阵运算 1 矩阵和向量 1.1 矩阵 矩阵,英文matrix,和array区别矩阵必须2维,但是array可以多维。 ...
  • 矩阵的基本概念以及意义矩阵方阵行向量列向量两个矩阵相等零矩阵O特殊矩阵2.矩阵的基本运算(加,减,乘)3.矩阵(方阵)的迹4.矩阵的转置5.对称矩阵(方阵) 本课程来自深度之眼,部分截图来自课程视频。 【第一章 ...

空空如也

空空如也

1 2
收藏数 31
精华内容 12
关键字:

列向量的转置是什么