矩阵的行主序与列主序

内存访问模式的影响:的性能分析 多维数组不同遍历方式有什么区别,cpu缓存结构工作原理 阅读详情

1.矩阵在内存中的存储

 

    不管是D3D还是OpenGL,使用的矩阵都是线性代数标准的矩阵,只是在存储方式上有所不同。分别为:行主序(Direct3D),列主序(OpenGL)

 

    存储顺序说明了线性代数中的矩阵如何在线性的内存数组中存储。

    例如:内存中使用一个二维数组m存储矩阵,第i行第j列的表示方法分别为: 

    行主序:m[i][j]

    列主序:m[j][i]

 

   线性代数意义的同一个矩阵,在d3d 和 openGL 中的存储顺序

      线代:a11,a12,a13,a14                  d3d :  a11,a12,a13,a14       OpenGL: a11,a21,a31,a41

                  a21,a22,a23,a24                             a21,a22,a23,a24                        a12,a22,a32,a42

                  a31,a32,a33,a34                             a31,a32,a33,a34                        a13,a23,a33,a43

                  a41,a42,a43,a44                             a41,a42,a43,a44                        a14,a24,a34,a44

 

2.行主序的矩阵与列主序的矩阵如何转换呢

 

    不难发现,M=MT


数组 一、数组的基本概念从逻辑结构上看,数组A是n(n>1)个相同类型数据元素a1、a2、…、an构成的有限。其逻辑表示为:A=(a1,a2,…,an)。其中,ai(1≤i≤n)表示数组A的第i个元素。一个二维数组可以看作是每个数据元素都是相同类型的一维数组的一维数组。以此类推,任何多维数组都可以看作一个线性表,这时线性表中的每个数据元素也是一个线性表。多维数组是线性表的推广。推广到d(d≥3)维数... 阅读详情

相关推荐

从‘’到‘’:在CUDA共享内存中优雅实现矩阵转置的完整流程循环展开优化

本文深入探讨了在CUDA共享内存中实现矩阵转置的优化策略,重点分析了转换中的bank conflict问题。通过共享内存padding技术和循环展开优化,显著提升了矩阵转置的性能,适用于大规模并计算场景。文章还提供了实际工程中的调优经验和块尺寸选择建议。

weixin_30500105的博客 408

数据结构 第五章 数组和广义表

因为只需要存储下三角的元素,那么第一需要存储1个、第二需要存储2个…稀疏因子:用矩阵中非零元素个数t除以矩阵的大小(mxn)

一路生花 1397

上三角矩阵 A 的上三角元素已按连续存放在数组 B 中,将 B 中元素按连续存放至数组 C 中.

原题:设已知有一个 n*n 的上三角矩阵 A 的上三角元素已按连续存放在数组 B 中. 设计一个算法将 B 中元素按连续存放至数组 C 中. 例:设 n = 3;          |1 2 4|  A=   |0 3 5|        B=(1,2,4,3,5,6), C=(1,2,3,4,5,6).          |0 0 6|, 分析:对于 A 中元素 a[i][

愿君出走半生,归来时仍是少年 6116

学《数据结构》越学越聪明--第六章》》》数组广义表一、数组

数组 数组的概念 从逻辑结构上看,一维数组A是n(n>1)个相同类型数据元素a1、a2、......、An构成的有限,其逻辑表示为: 从A=(a1、a2、....、An) 其中,a1(1= 一个mm的二维数组A可以看作是每个数据元素都是相同类型的一维数组的一维数组。 由此看出,多维数组是线性表的推广 数组的抽象数据类型+运算描述 数组的基本运算如下: Value(A,index1,index2,.....,indexD)即A(index,index2,...,ind..

qq_46163557的博客 928

C语言——数组

C 语言支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺集合。数组是用来存储一系数据,但它往往被认为是一系相同类型的变量。数组的声明并不是声明一个个单独的变量,比如 num0、num1、... 、num99,而是声明一个数组变量,比如 num[],然后使用 num[0]、num[1]、...、num[99] 来代表一个个单独的变量。所有的数组都是由连续的内存位置组成。最低的地址对应第一个元素,最高的地址对应最后一个元素。数组中的特定元素可以通过索引访问,第一个索引值为 0。

Stewie Lee的博客 2787

OpenGL矩阵

OpenGL中使用的矩阵,都是数学意义上的标准矩阵。但是各个OpenGL应用在实现矩阵时,根据存储方式的不同,分为两个派别:是指以为优先单位,在内存中逐存储;是指以为优先单位,在内存中逐存储。下图是数学意义上的标准矩阵:标准矩阵OpenGL中,举一个具体例子,平移矩阵表现为以下形式:OpenGL平移矩阵如果以存储该矩阵...

weixin_34384915的博客 2044

两个向量相乘怎么计算_矩阵向量、向量

看龙书的时候发现一个矩阵在传入Shader之前都要转置一下,很好奇为什么要有一步这样的操作。矩阵在内存中逐存储,矩阵在内存中逐存储。矩阵内存布局:矩阵内存布局:向量和向量向量指的是把向量当成一个一n矩阵向量指的是把向量当成一个n矩阵。左乘和右乘矩阵“左乘”:矩阵和向量相乘时放在左边。矩阵“右乘”:矩阵和向量相乘时放在右边。对于同...

weixin_39571179的博客 5263

矩阵点乘和叉乘的区别_矩阵向量、向量

看龙书的时候发现一个矩阵在传入Shader之前都要转置一下,很好奇为什么要有一步这样的操作。矩阵在内存中逐存储,矩阵在内存中逐存储。矩阵内存布局:矩阵内存布局:向量和向量向量指的是把向量当成一个一n矩阵向量指的是把向量当成一个n矩阵。左乘和右乘矩阵“左乘”:矩阵和向量相乘时放在左边。矩阵“右乘”:矩阵和向量相乘时放在右边。对于同...

weixin_39812224的博客 2854

矩阵,左乘右乘及其计算效率解析

  在计算机存储中,矩阵有两种存储方式,一种是“(row-major order)/优先”,另一种就是“(column-major order)/优先”。   在我们常用的库中,Direct3D是采用存储的,而OpenGL则是采用存储的。   本文转载自矩阵向量、向量,更详细的解读可点进去查阅。 ...

zeeq的博客 2863

向量,向量,矩阵矩阵(row vector,column vector,row major-matrix,column-major matrix)

转自:https://www.xuebuyuan.com/247515.html 关于这个话题,网上有n多个版本,今天,我也来说说这个话题。 (一)首先,无论dx还是opengl,所表示的矢量和矩阵都是依据线性代数中的标准定义的: “矩阵AB的乘积矩阵C的第i第j的元素c(ij)等于A的第i于B的第j的对应元素乘积的和。”(实用数学手册,科学出版社,第二版) 例如c12 = a11*b...

kupePoem的专栏 5261

向量,向量,矩阵矩阵

原理: PS: 很不喜欢OGL的矩阵方式,不过本质上是一样的。 v2 = v1 * ma * mb;        (dx) v2 = mb(T) * ma(T) * v1     (ogl) 关于这个话题,网上有n多个版本,今天,我也来说说这个话题。(一)首先,无论dx还是opengl,所表示的矢量和矩阵都是依据线性代数中的标准定义的:“矩阵AB的乘积矩阵C的第i...

weixin_30521161的博客 277

矩阵

因为之前接触的是虚幻,用的是DX,所以接触的是矩阵。最近一年接触自研引擎,用的是OpenGL矩阵。然而我之前图形基础没打好,以至于很长一段时间没弄清楚涉及到矩阵相关的一些问题。所以乘着自己意识清醒,还是应该梳理一下。 1、什么是矩阵什么是矩阵 2、什么时候向量是前乘什么时候是后乘 3、构造旋转位移缩放矩阵时,矩阵乘法应该按照什么样顺 矩阵 r11 r12 r13 0...

野生的声威的专栏 3540

数组的顺存储

① 数组是高级语言一般都支持的数据类型,这里学习数组在计算机内部如何处理,要是存取,地址计算;② 从逻辑结构上看,数组可以看成是一般线性表的扩充。二维数组视作线性表① 把矩阵Am×n看成n个向量的线性表:αj=(a1j,a2j, …,amj),(1 ≤ j ≤ n)本身也是一个线性表,称为向量。②把矩阵Am×n看成m个向量的线性表:βi = (ai1, ai2, …, aij, …, ain),(1 ≤ i≤ m)称为向量。高维数组。

tecoes的博客 5703

4.2 数组

以对称矩阵为例,假设矩阵A大小为nxn,则对称矩阵只需要存储1+2+…+n=n(n+1)/2个元素(红色底的数据)。下标i,j一维数组B[k]的对应关系如下。数组顺存储分为以为主、以为主两种。以为主,就是先存第1,再存第2,依次类推。数组是线性表的推广,数组中每个元素都是一个线性表。数组采用顺存储,因为其一般不做插入、删除操作。矩阵是科学工程研究领域常用的数学对象。数据元素的存储位置是其下标的线性函数。数组的基本操作包括取值、赋值。

qq_19069557的博客 529

【课上笔记】第五章 数组和广义表

第五章 数组和广义表

manerzi的博客 1222

数组存储 · | 应用 / 基地址 / 选择策略

……

u013669912的博客 1170

mkl转换——以cblas_sgemm为例

本文 以mkl中的cblas_sgemm为例演示调用方式以及相互调用。 cblas_sgemm接口: void cblas_sgemm (const CBLAS_LAYOUT Layout, const CBLAS_TRANSPOSE transa, const CBLAS_TRANSPOSE transb, const MKL_INT m, const MKL_INT n, con...

jnulzl的专栏 2299

三维数组在内存的中的存储结构

    在FORTRAN中,数组在内存中是按连续存储的;一个数组在内存中也是连续的。对一个三维数组array(x, y, z)来说,x ,y, z分别表示的数组的、页标,在内存中按连续存储,每一个页面上的元素在内存中的地址也是连续的。    目前的计算机硬件体系结构决定了在读取大批量数据时,如果这一批数据都位于监控的内存中,读取操作会执的较快。因此,在特定的情况下,我们可能通过程的执时间,来验证数组的在内存的中的存储结构。 module variable in

We need more…… 1万+
上一篇: 各种低高级着色语言
下一篇: OpenGL与Direct3D几点不同(坐标系,向量,绕序)
oracleot
博客等级 码龄21年 21粉丝 25原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值