置换矩阵为什么被用于交换数组的行?

7

使用置换矩阵交换行的优点是什么?为什么要创建置换矩阵并应用矩阵乘法,这比使用for循环交换行更容易和更有效吗?

2个回答

8

置换矩阵是一种有用的数学抽象,因为它们允许使用矩阵代数的常规规则进行分析,而无需引入另一种类型的操作。

在软件中,好的实现不会将置换矩阵作为完整矩阵存储,而是直接存储置换数组并应用它(无需进行完整的矩阵乘法)。

根据涉及的矩阵大小和操作和访问模式,可能更便宜的方法是根本不在内存中应用置换,而只是将其用作额外的间接寻址。因此,当您请求(P * M)(i,j)时,其中P是置换矩阵,M是您正在排列的其他矩阵,数据根本不需要重新排列,而是元素访问操作将在访问元素时查找置换后的行。


0

我脑海中首先想到的是“空间局部性”问题。缓存技术假设如果访问了一个内存位置,那么很可能会访问该内存附近的位置。在某些编程语言中,行中的元素是相邻的,而在其他语言中,列中的元素是相邻的,这取决于实现方式。我猜置换矩阵是为了解决这个问题而设计的,因为矩阵乘法的优化是算法学术界主要致力于改进的问题之一。简单的循环结构将无法利用缓存技术来提高性能。


1
-1:这完全是错误的。高性能线性代数包不会使用通用矩阵乘法来应用置换。这样做比直接应用置换要慢得多。空间局部性问题完全是无稽之谈 - 直接应用置换的代码可以更容易地进行优化,以获得良好的内存访问模式,甚至比通用矩阵乘法更容易。 - John Bartholomew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接