对称对角矩阵的表示

Posted

技术标签:

【中文标题】对称对角矩阵的表示【英文标题】:Representation of a symmetric diagonal matrix 【发布时间】:2016-10-19 00:29:07 【问题描述】:

假设我们有一个巨大的对称对角矩阵。实现这一点的有效方法是什么?

我能想到的唯一方法是通过使用Xij = Xji 的对称属性,我们可以将这个矩阵的大小减少一半。但是使用 2D 数组来表示这个矩阵是低效的,因为我们不能通过使用数组来减小矩阵的大小。

使用邻接表表示这个矩阵的另一件事也是低效的,因为将这个矩阵与一个图相关联。这将是一个密度图。并且adj list的操作需要大量的时间,如删除、插入和搜索。

但是使用堆呢?

【问题讨论】:

尝试使用带有锯齿列和索引的一维数组来处理镜像。 是的,这是一个不错的选择。有没有其他你能想到的方法? 恐怕没有足够的信息给你更好的东西。需要知道您的预期使用模式,但一维数组即使具有您需要的中等复杂的索引数学,也会遇到很多问题。 Emm..什么是对称对角矩阵?你能举个例子吗? 【参考方案1】:

在您决定要如何处理这个矩阵(或者可能是矩阵?)之前,没有一个答案。

如果您只是要存储并记住它,那么只需按顺序存储它,省去多余的条目。 (您的代码知道如何访问它,因为这就是它所做的一切,对吧?)

更可能的是,您想对其进行正常的矩阵运算。在这种情况下,您是想提高存储效率还是提高执行效率?在后一种情况下,我看不到很多基于对称的机会——乘法是昂贵的东西,你可能仍然需要所有这些。如果是存储,那么您是否将自己限制在只接受对称输入和对称输出的操作?听起来非常具体。如果是这样,那么您只需要对要存储的部分进行计算,因为根据定义,其他条目是对称的,因此只需编写代码来生成矩阵的该部分即可。

【讨论】:

有时你知道我们需要在高效存储和高效执行之间取得平衡。我处理它的矩阵包含点之间的距离,即距离度量,例如余弦距离。由于我处理的是大型数据集,我需要找到有效的数据结构来平衡存储和执行。 通常在 0-50% 的范围内储蓄不会让任何人兴奋(真正的回报是 90-99.9% 的储蓄)。但是,如果这使您的系统可行,我会说值得编写所有代码,以便它知道每个矩阵的形状——无论如何,只有操作代码才能为矩阵中的任何给定位置赋予意义。

以上是关于对称对角矩阵的表示的主要内容,如果未能解决你的问题,请参考以下文章

欧氏空间05——实对称矩阵的标准形

5.4 实对称矩阵的对角化

matlab如何生成对角元素为无穷大,且对称的矩阵

上三角下三角对称矩阵

矩阵及矩阵运算

matlab 怎样生成一个N*N的对称矩阵,要主对角线的元素为0,其他随意?