MULTIPROD是一个强大的、快速和内存高效推广天数组的MATLAB矩阵乘法操作符(*)。而后者只能用二维数组,MULTIPROD作品也与多维数组。
MULTIPROD之间执行多个乘法矩阵,向量,或两个多维数组中包含的标量,自动启用虚拟阵列扩展(AX)。AX允许你,例如,用一个矩阵乘以一个数组的矩阵B,几乎复制了获取数组兼容B。
多维数组可能包含矩阵或向量甚至标量沿着一个或两个维度。例如,一个4×5×3数组包含三个4×5矩阵在其第一和第二维度(图1)。因此,数组可以被描述为一个块数组元素的矩阵,和它的大小可以用(4×5)×3。
MULTIPROD也可以描述为一个泛化的内置函数乘以。当次运营中的元素乘法(例如。* B), MULTIPROD事情,矩阵乘法。
例子
假设
(2×5)×6,
B是(5×3)×6。
与MULTIPROD 6矩阵可以乘以B的一个直观上很有吸引力的步骤:
C = MULTIPROD (A, B)。
在C (2×3)×6。
通过自动应用AX, MULTIPROD可以用一个矩阵乘以一个街区的所有块数组。所以,如果
2×5(单矩阵)
B×1000×10 (5×3),
然后C = MULTIPROD (A, B)的收益率(2×3)×1000×10数组。实际上是扩展到一个(2×5)×1000×10的大小,然后由b multi-multiplied这样做是不使用循环,实际上没有复制矩阵(见附录A)。我们称这种特殊应用的AX为虚拟矩阵扩张。在系统运行MATLAB R2008a, MULTIPROD执行它相当于380倍以下循环(见附录B):
因为我= 1:1000
j = 1:10
C (:,:, i, j) = A * B (:,:, i, j);
结束
结束
AX推广了矩阵扩张多维数组的大小。例如,如果
(2×5)×10,和
B (5×3)×1×6,
然后C = MULTIPROD (A, B)乘以每个10矩阵的每个6矩阵B,获得60矩阵存储在一个数组(2×3)×10×6 C,它通过几乎扩大(2×5)×10×6,和B (5×3)×10×6。详细定义AX手册中提供了。
应用程序
MULTIPROD有着广泛的潜在应用领域。通过调用MULTIPROD,多个几何变换如旋转或roto-translations可以执行大型数组向量的一个步骤,没有循环。等多个操作规范的数组向量,或发现他们沿着坐标轴投影显示的另一个数组向量可以轻松地执行,没有循环和两到三行代码。
样本函数通过调用MULTIPROD执行这些任务都包含在单独的工具箱“多维数组向量的向量代数”(MATLAB中央,文件# 8782)。
优化和测试
因为我想要的服务尽可能多的人,MULTIPROD设计,调试,优化速度和内存效率极度小心。宝贵建议,金惠白(乔治敦大学)帮助我使它更快,更有效率和更多样化的。建议进一步改善将是受欢迎的。代码(“testMULTIPROD.m”)我曾经系统测试函数输出包含在这个包中。
ARRAYLAB工具箱
总之,MULTIPROD是一天的泛化数组的矩阵乘法函数MTIMES,启用了斧子。
广义向量内、外和交叉产品一天由DOT2数组和启用了斧头,外,Cs manbetx 845ROSS2 (MATLAB中央、文件# 8782//www.tianjin-qmedu.com/matlabcentral/fileexchange/8782)。
中的元素乘法(见次)和其他elementwise二进制操作(如加和EQ)启用了AX由BAXFUN (MATLAB中央、文件# 23084//www.tianjin-qmedu.com/matlabcentral/fileexchange/23084)。
在一起,这些功能构成了“ARRAYLAB工具箱”。我希望MathWorks在MATLAB的下一版本将包括它。
MULTITRANSP
这个包包括MULTITRANSP函数,执行多个矩阵互换。B = MULTITRANSP (DIM)转置矩阵的所有包含维度的暗淡,昏暗的+ 1。
引用作为
保罗·德·利瓦(2023)。多个矩阵乘法,启用了数组的扩张(//www.tianjin-qmedu.com/matlabcentral/fileexchange/8773-multiple-matrix-multiplications-with-array-expansion-enabled), MATLAB中央文件交换。检索。