矩形矩阵的原地转置算法研究
1. 引言
在矩阵运算中,矩阵转置是一个常见的操作。对于一个 $m$ 行 $n$ 列的矩形矩阵 $A$,其转置矩阵 $A^T$ 是一个 $n$ 行 $m$ 列的矩阵。目前,在稠密线性代数库中,当 $m \neq n$ 时,往往缺乏高效的原地转置算法。
这里介绍一种新的算法,它在原地转置矩形矩阵时所需的额外存储空间很少甚至不需要。该算法的最坏情况复杂度为 $O(N \log N)$,其中 $N = mn$。当使用大小为 IWORK 字的位向量时,能进一步提高效率;当 IWORK = 0 时,不使用额外存储;当 IWORK = m*n/ws ($ws$ 为字大小)时,算法复杂度为 $O(N)$。
该算法基于对长度为 $q = mn - 1$ 的置换 $P$ 的循环跟踪。置换 $P$ 由 Fortran 和 C 语言的标准存储布局所诱导的 $A$ 到 $A^T$ 的映射定义。通过位向量可以标记 $P$ 的哪些循环已被访问,从而轻松确定每个新循环的起始点。
2. 基本原地转置算法 IPT
以下是基本原地转置算法 IPT 的代码:
ALGORITHM IPT (m,n,A)
DO cnt = 1, mn-2
k = P(cnt)
DO WHILE (k > cnt)
k = P(k)
END DO
IF (k = cnt) then
Transpose that part
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



