导航:首页 > 源码编译 > 矩阵乘法快速算法

矩阵乘法快速算法

发布时间:2023-01-18 21:48:19

A. 老师,矩阵相乘怎么算

矩阵相乘要求前一个矩阵的行数和后一个的矩阵列数要相同,这样你用前一个的第一行的数去乘以后一个第一列的对应的数而后相加,即求得第一行与第一列的乘数和,并填写在第一个上面,以后每一行与每一列都这么算,并填写在相应的位置即可。

B. 矩阵的乘法运算怎么算

矩阵的乘法,首先要判定能不能作乘法,即要求作乘法时,前一个矩阵的列数与后一个矩阵的行数相等。

设矩阵A是m×n的、矩阵B是n×s的,乘法AB后得到矩阵C,则C为m×s的,如下图所示。

其他元素也是同理,分别取A的某行与B的某列,将对应元素相乘求出。

C. 高数中的矩阵乘法要怎么计算,方法步骤是什么

矩阵相乘最重要的方法是一般矩阵乘积。它只有在第一个矩阵的列数(column)和第二个矩阵的行数(row)相同时才有意义。一般单指矩阵乘积时,指的便是一般矩阵乘积。

1、前一矩阵的第一行对应元乘以后一矩阵第一列对应元之和为新矩阵的第一行第一列的元素。

例如:1*0+1*1=1

2、前一矩阵的第一行对应元乘以后一矩阵第二列对应元之和为新矩阵的第一行第二列的元素。

例如:1*2+1*1=3

3、前一矩阵的第一行对应元乘以后一矩阵第三列对应元之和为新矩阵的第一行第三列的元素。

例如:1*3+1*2=5

4、前一矩阵的第二行对应元乘以后一矩阵第一列对应元之和为新矩阵的第二行第一列的元素。

例如:2*0+0*1=0

5、前一矩阵的第二行对应元乘以后一矩阵第二列对应元之和为新矩阵的第二行第二列的元素。

例如:2*2+0*1=4

6、前一矩阵的第二行对应元乘以后一矩阵第三列对应元之和为新矩阵的第二行第三列的元素。

例如:2*3+0*2=6

注意事项:

1、分清楚矩阵就是指数表与行列式不同,矩阵相乘就是两个数表的运算。

2、自己多总结规律,就知道矩阵相乘是如何运算的了。

D. 线性代数中矩阵相乘如何计算啊

左边矩阵的行的每一个元素 与右边矩阵的列的对应的元素一一相乘然后加到一起形成新矩阵中的aij元素 i是左边矩阵的第i行 j是右边矩阵的第j列

例如 左边矩阵:

2 3 4

1 4 5

右边矩阵

1 2

2 3

1 3

相乘得到: 2×1+3×2+4×1 2×2+3×3+4×3

1×1+4×2+5×1 1×2+4×3+5×3

这样2×2阶的一个矩阵

(4)矩阵乘法快速算法扩展阅读:

矩阵乘法

(1) mxn的矩阵T乘向量x可以理解为将这个n维列向量线性映射为一个m维列向量:

(2) 而一个mxn矩阵乘nxL 矩阵就是先进行一个线性映射再进行一个线性映射.

这叫做线性映射的复合。线性映射的复合是另一个线性映射。映射T和映射S的复合记做:T o S.

将映射表示为矩阵。则线性映射的复合就是对应的矩阵相乘.

(3) 由于复合映射的前一个映射的目标空间是另一个的域空间。所以矩阵乘法要求第一个的列数要等于第二个的行数。

将新基矩阵T的每一行向量看做一个用原基向量(i,j,k,...)表示的一个新的轴/基,若共R行,即R维度,新的空间共R个轴,将X的每一列都看做为一组特征向量,每一列的特征相同都是n维的点(x11,x12,..,x1n)(x1表示第一列向量),只是不同列的赋值不同。

相乘的结果为矩阵Y,那么Y内的某个值,即是某列特征在某个轴上的投影大小,Y的某行向量,即是所有特征在某轴上的投影结果,Y的列向量,即是某个特征(原坐标的一个点)在新的空间的投影/新值,R维的点(t1x1,t2x1,...,trx1)。

Y矩阵表示的是,原坐标中所有点,通过T坐标空间的转换,得到的新的空间点集合。

E. 矩阵乘法如何计算

比如乘法AB
一、1)用A的第1行各个数与B的第1列各个数对应相乘后加起来,就是乘法结果中第1行第1列的数;
2)用A的第1行各个数与B的第2列各个数对应相乘后加起来,就是乘法结果中第1行第2列的数;
3)用A的第1行各个数与B的第3列各个数对应相乘后加起来,就是乘法结果中第1行第3列的数;
依次进行,
(直到)用A的第1行各个数与B的第末列各个数对应相乘后加起来,就是乘法结果中第1行第末列的的数,
二、1)用A的第2行各个数与B的第1列各个数对应相乘后加起来,就是乘法结果中第2行第1列的数;
2)用A的第2行各个数与B的第2列各个数对应相乘后加起来,就是乘法结果中第2行第2列的数;
3)用A的第2行各个数与B的第3列各个数对应相乘后加起来,就是乘法结果中第2行第3列的数;
依次进行,
(直到)用A的第2行各个数与B的第末列各个数对应相乘后加起来,就是乘法结果中第2行第末列的的数,
依次进行,
(直到)用A的第末行各个数与B的第1列各个数对应相乘后加起来,就是乘法结果中第末行第1列的数;
2)用A的第末行各个数与B的第2列各个数对应相乘后加起来,就是乘法结果中第末行第2列的数;
3)用A的第末行各个数与B的第3列各个数对应相乘后加起来,就是乘法结果中第末行第3列的数;
依次进行,
(直到)用A的第末行各个数与B的第末列各个数对应相乘后加起来,就是乘法结果中第末行第末列的的数。

F. 求助,有没有矩阵相乘的快速算法

算法介绍
矩阵相乘在进行3D变换的时候是经常用到的。在应用中常用矩阵相乘的定义算法对其进行计算。这个算法用到了大量的循环和相乘运算,这使得算法效率不高。而矩阵相乘的计算效率很大程度上的影响了整个程序的运行速度,所以对矩阵相乘算法进行一些改进是必要的。
这里要介绍的矩阵算法称为斯特拉森方法,它是由v.斯特拉森在1969年提出的一个方法。
我们先讨论二阶矩阵的计算方法。
对于二阶矩阵
a11 a12 b11 b12
A = a21 a22 B = b21 b22
先计算下面7个量(1)
x1 = (a11 + a22) * (b11 + b22); x2 = (a21 + a22) * b11; x3 = a11 * (b12 - b22); x4 = a22 * (b21 - b11); x5 = (a11 + a12) * b22; x6 = (a21 - a11) * (b11 + b12); x7 = (a12 - a22) * (b21 + b22);

再设C = AB。根据矩阵相乘的规则,C的各元素为(2)
c11 = a11 * b11 + a12 * b21 c12 = a11 * b12 + a12 * b22 c21 = a21 * b11 + a22 * b21 c22 = a21 * b12 + a22 * b22

比较(1)(2),C的各元素可以表示为(3)
c11 = x1 + x4 - x5 + x7 c12 = x3 + x5 c21 = x2 + x4 c22 = x1 + x3 - x2 + x6

根据以上的方法,我们就可以计算4阶矩阵了,先将4阶矩阵A和B划分成四块2阶矩阵,分别利用公式计算它们的乘积,再使用(1)(3)来计算出最后结果。
ma11 ma12 mb11 mb12
A4 = ma21 ma22 B4 = mb21 mb22
其中
a11 a12 a13 a14 b11 b12 b13 b14
ma11 = a21 a22 ma12 = a23 a24 mb11 = b21 b22 mb12 = b23 b24

a31 a32 a33 a34 b31 b32 b33 b34
ma21 = a41 a42 ma22 = a43 a44 mb21 = b41 b42 mb22 = b43 b44
实现
// 计算2X2矩阵 void Multiply2X2(float& fOut_11, float& fOut_12, float& fOut_21, float& fOut_22, float f1_11, float f1_12, float f1_21, float f1_22, float f2_11, float f2_12, float f2_21, float f2_22) { const float x1((f1_11 + f1_22) * (f2_11 + f2_22)); const float x2((f1_21 + f1_22) * f2_11); const float x3(f1_11 * (f2_12 - f2_22)); const float x4(f1_22 * (f2_21 - f2_11)); const float x5((f1_11 + f1_12) * f2_22); const float x6((f1_21 - f1_11) * (f2_11 + f2_12)); const float x7((f1_12 - f1_22) * (f2_21 + f2_22)); fOut_11 = x1 + x4 - x5 + x7; fOut_12 = x3 + x5; fOut_21 = x2 + x4; fOut_22 = x1 - x2 + x3 + x6; } // 计算4X4矩阵 void Multiply(CLAYMATRIX& mOut, const CLAYMATRIX& m1, const CLAYMATRIX& m2) { float fTmp[7][4]; // (ma11 + ma22) * (mb11 + mb22) Multiply2X2(fTmp[0][0], fTmp[0][1], fTmp[0][2], fTmp[0][3], m1._11 + m1._33, m1._12 + m1._34, m1._21 + m1._43, m1._22 + m1._44, m2._11 + m2._33, m2._12 + m2._34, m2._21 + m2._43, m2._22 + m2._44); // (ma21 + ma22) * mb11 Multiply2X2(fTmp[1][0], fTmp[1][1], fTmp[1][2], fTmp[1][3], m1._31 + m1._33, m1._32 + m1._34, m1._41 + m1._43, m1._42 + m1._44, m2._11, m2._12, m2._21, m2._22); // ma11 * (mb12 - mb22) Multiply2X2(fTmp[2][0], fTmp[2][1], fTmp[2][2], fTmp[2][3], m1._11, m1._12, m1._21, m1._22, m2._13 - m2._33, m2._14 - m2._34, m2._23 - m2._43, m2._24 - m2._44); // ma22 * (mb21 - mb11) Multiply2X2(fTmp[3][0], fTmp[3][1], fTmp[3][2], fTmp[3][3], m1._33, m1._34, m1._43, m1._44, m2._31 - m2._11, m2._32 - m2._12, m2._41 - m2._21, m2._42 - m2._22); // (ma11 + ma12) * mb22 Multiply2X2(fTmp[4][0], fTmp[4][1], fTmp[4][2], fTmp[4][3], m1._11 + m1._13, m1._12 + m1._14, m1._21 + m1._23, m1._22 + m1._24, m2._33, m2._34, m2._43, m2._44); // (ma21 - ma11) * (mb11 + mb12) Multiply2X2(fTmp[5][0], fTmp[5][1], fTmp[5][2], fTmp[5][3], m1._31 - m1._11, m1._32 - m1._12, m1._41 - m1._21, m1._42 - m1._22, m2._11 + m2._13, m2._12 + m2._14, m2._21 + m2._23, m2._22 + m2._24); // (ma12 - ma22) * (mb21 + mb22) Multiply2X2(fTmp[6][0], fTmp[6][1], fTmp[6][2], fTmp[6][3], m1._13 - m1._33, m1._14 - m1._34, m1._23 - m1._43, m1._24 - m1._44, m2._31 + m2._33, m2._32 + m2._34, m2._41 + m2._43, m2._42 + m2._44); // 第一块 mOut._11 = fTmp[0][0] + fTmp[3][0] - fTmp[4][0] + fTmp[6][0]; mOut._12 = fTmp[0][1] + fTmp[3][1] - fTmp[4][1] + fTmp[6][1]; mOut._21 = fTmp[0][2] + fTmp[3][2] - fTmp[4][2] + fTmp[6][2]; mOut._22 = fTmp[0][3] + fTmp[3][3] - fTmp[4][3] + fTmp[6][3]; // 第二块 mOut._13 = fTmp[2][0] + fTmp[4][0]; mOut._14 = fTmp[2][1] + fTmp[4][1]; mOut._23 = fTmp[2][2] + fTmp[4][2]; mOut._24 = fTmp[2][3] + fTmp[4][3]; // 第三块 mOut._31 = fTmp[1][0] + fTmp[3][0]; mOut._32 = fTmp[1][1] + fTmp[3][1]; mOut._41 = fTmp[1][2] + fTmp[3][2]; mOut._42 = fTmp[1][3] + fTmp[3][3]; // 第四块 mOut._33 = fTmp[0][0] - fTmp[1][0] + fTmp[2][0] + fTmp[5][0]; mOut._34 = fTmp[0][1] - fTmp[1][1] + fTmp[2][1] + fTmp[5][1]; mOut._43 = fTmp[0][2] - fTmp[1][2] + fTmp[2][2] + fTmp[5][2]; mOut._44 = fTmp[0][3] - fTmp[1][3] + fTmp[2][3] + fTmp[5][3]; }

比较
在标准的定义算法中我们需要进行n * n * n次乘法运算,新算法中我们需要进行7log2n次乘法,对于最常用的4阶矩阵:


原算法
新算法

加法次数
48 72(48次加法,24次减法)

乘法次数
64 49

需要额外空间
16 * sizeof(float) 28 * sizeof(float)

新算法要比原算法多了24次减法运算,少了15次乘法。但因为浮点乘法的运算速度要远远慢于加/减法运算,所以新算法的整体速度有所提高。

G. 矩阵乘法如何计算详细步骤!

回答:

此题2行2列矩阵乘以2行3列矩阵。

所得的矩阵是:2行3列矩阵

最后结果为: |1 3 5|

|0 4 6|

拓展资料

1、确认矩阵是否可以相乘。只有第一个矩阵的列的个数等于第二个矩阵的行的个数,这样的两个矩阵才能相乘。

图示的两个矩阵可以相乘,因为第一个矩阵,矩阵A有3列,而第二个矩阵,矩阵B有3行。


6、检查相应的数字是否出现在正确的位置。19在左下角,-34在右下角,-2在左上角,-12在右上角。

H. 两个矩阵相乘怎么计算

矩阵相乘需要前面矩阵的行数与后面矩阵的列数相同方可相乘。

第一步先将前面矩阵的每一行分别与后面矩阵的列相乘作为结果矩阵的行列。

第二步算出结果即可。

第一个的列数等于第二个的行数,A(3,4) 。B(4,2) 。C=AB,C(3,2)。

(8)矩阵乘法快速算法扩展阅读:

矩阵相乘最重要的方法是一般矩阵乘积。只有在第一个矩阵的列数(column)和第二个矩阵的行数(row)相同时才有意义 。

一般单指矩阵乘积时,指的便是一般矩阵乘积。一个m×n的矩阵就是m×n个数排成m行n列的一个数阵。由于它把许多数据紧凑的集中到了一起,所以有时候可以简便地表示一些复杂的模型。

阅读全文

与矩阵乘法快速算法相关的资料

热点内容
程序员送女友的相册 浏览:247
压缩文件怎么设置打开加密 浏览:764
tracert命令结果详解 浏览:356
唯赛思通用什么APP 浏览:371
古玩哪个app好卖 浏览:146
u盘内容全部显示为压缩包 浏览:517
编译固件时使用00优化 浏览:356
速借白条app怎么样 浏览:756
用纸张做的解压东西教程 浏览:12
求圆的周长最快算法 浏览:190
安卓热点怎么减少流量 浏览:270
北京代交社保用什么app 浏览:855
第一眼解压视频 浏览:726
文件夹err是什么 浏览:97
qt4编程pdf 浏览:572
局域网服务器下如何连续看照片 浏览:254
经过加密的数字摘要 浏览:646
加密锁9000变打印机 浏览:694
程序员的职业发展前途 浏览:639
安卓是世界上多少个程序员开发 浏览:45