图片缩略图

MTIMESX -快速矩阵乘法与多维支持万博1manbetx

version 1.10.0.0 (256 KB) by 詹姆斯Tursa
Beats MATLAB 300% - 400%在某些情况下…真的!

17.5 k下载

更新2011年2月23日

查看许可协议

MTIMESX是一个快速通用的矩阵和标量乘法程序,具有以下特点:

—直万博1manbetx接支持多维数组(nD, n>2)
—支万博1manbetx持转置、共轭转置和共轭预运算
—支万博1manbetx持单例扩展
-使用BLAS调用、自定义C循环代码或OpenMP多线程C循环代码
-可以精确或近似地匹配MATLAB的结果
-在大多数情况下可以达到或超过MATLAB的速度

MTIMESX有六种基本运行模式:

- BLAS:始终使用BLAS库调用
-循环:如果有的话,总是使用C循环
- LOOPSOMP:如果可用,总是使用OpenMP多线程C循环
- MATLAB:与MATLAB完全匹配的最快BLAS或LOOPS方法(默认)
- SPEED:最快的BLAS或LOOPS方法,即使它不完全匹配MATLAB
- SPEEDOMP:最快的BLAS、LOOPS或LOOPOMP方法,即使它与MATLAB不完全匹配

MTIMESX输入可以是:



双稀疏

一般语法是(括号[]中的参数是可选的):

mtimesx((指令))
mtimesx(A [,transa],B [,transb] [,directive])

其中transa, transb和directive是可选输入:

表示对A进行预操作的字符:
transb =表示对B的预操作的字符:
预操作可以是:
'N'或'N' =没有预操作(如果trans_缺失则默认)
T或T =转置
'C'或'C' =共轭转置
'G'或'G' =共轭(没有转置)
directive =上面列出的模式之一,或者其他指令

例子:

C = mtimesx(A,B) %执行计算C = A * B
C = mtimesx(A,'T',B) %执行计算C = A。‘* B
C = mtimesx(A,B,'g') %执行计算C = A * conj(B)
C = mtimesx(A,' C',B,'C') %执行计算C = A' * B'
mtimesx('SPEEDOMP','OMP_SET_NUM_THREADS(4)') %设置SPEEDOMP模式的线程数为4

对于nD情况,前两个维度指定了所涉及的矩阵乘法。其余维度是重复的,并指定要对结果执行的单个矩阵乘法的数量。即,MTIMESX将这些情况视为二维矩阵的数组,并对相关的配对进行操作。例如:

如果A是(2,3,4,5)B是(3,6,4,5)那么

mtimesx (A, B)会导致C(2、6、4、5),其中C (:,:, i, j) =一个(:,:,i, j) * B (:,:, i, j), i = 1:4, j = 1:5

这相当于MATLAB的m-code:

C = 0(2、6、4、5);
m = 1:4
为n = 1:5
C(:,:,m,n) = A(:,:,m,n) * B(:,:,m,n);
结束
结束

前两个维度必须符合使用标准矩阵乘法规则,将transa和transb预操作考虑进去,并且维度3:end必须完全匹配或为单元素(等于1)。如果一个维度是单元素,那么它实际上会扩展到所需的大小(即,相当于repmat操作,使其达到符合规格的大小,但不需要实际的数据副本)。这相当于矩阵乘法的bsxfun功能。

引用作为

詹姆斯Tursa(2021)。MTIMESX -快速矩阵乘法与多维支持万博1manbetx(//www.tianjin-qmedu.com/matlabcentral/fileexchange/25977-mtimesx-fast-matrix-multiply-with-multi-dimensional-万博1manbetxsupport), MATLAB中央文件交换。检索

MATLAB版本兼容性
创建R2007a
与任何版本兼容
平台的兼容性
窗户 macOS Linux

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!