交换对称矩阵中两个索引的算法

标签 algorithm matrix swap

我现在正在尝试一天来寻找一种算法来交换对称矩阵中的两个索引,以便结果也是一个对称矩阵。

假设我有以下矩阵:

0 1 2 3
1 0 4 5
2 4 0 6
3 5 6 0

假设我想交换第 1 行和第 3 行(其中第 0 行是第一行)。只需交换结果:

0 1 2 3
3 5 6 0
2 4 0 6
1 0 4 5

但是这个矩阵不再对称了。结果我真正想要的是跟随矩阵:

0 3 2 1
3 0 6 5
2 6 0 4
1 5 4 0

但是我找不到合适的算法。这真的让我很兴奋,因为这看起来很容易。

有人知道吗?

更新

Phylogenesis 给出了一个非常简单的答案,我觉得自己想不出来很傻。但这里有一个后续任务:

假设我将这个矩阵存储为二维数组。为了节省内存,我不保存冗余值,而且我也省略了始终具有 0 值的对角线。我的阵列看起来像这样:

[ [1, 2, 3], [4, 5], [6] ]

我的目标是将该数组转换为:

[ [3, 2, 1], [6, 5], [4] ]

如何使用给定的数组高效地交换行和列?

最佳答案

很简单!

正如您目前所做的那样,将第 1 行与第 3 行交换。然后将第 1 列与第 3 列交换。

关于交换对称矩阵中两个索引的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17997382/

相关文章:

python - 为什么我使用 scipy 将两个 CSR 矩阵相乘时会消耗这么多内存?

linux - 了解 Linux 上每个进程使用了​​多少交换空间

Sed 交换模式

c++ - 如何在游览中拼接节点

mysql - 如何编写足球排名系统算法

python - 如何使用 numpy 对 Floyd-Steinberg 的抖动算法进行矢量化?

c++ - DirectX 3D 围绕 lookAt 旋转 eyePt

algorithm - 从棋盘构建邻接图(用于 dijkstra)

linux - 如何在ec2实例中的/mnt上挂载交换分区

java - 构建最佳折线