language-agnostic - 如何存储对称矩阵?

标签 language-agnostic matrix

在内存中存储对称矩阵的最佳方法是哪一种?

最好节省一半的空间,而又不会过多地降低结构的速度和复杂性。这是一个与语言无关的问题,但是如果您需要做一些假设,只需假设它是一种很好的古老普通编程语言,例如C或C++。

似乎有一种感觉,就好像有一种方法可以使事情简单或只是在矩阵本身很大时,对吗?

仅出于形式上的考虑,我的意思是,对于我要存储的数据,此断言始终正确

matrix[x][y] == matrix[y][x]

最佳答案

我发现许多高性能程序包仅存储整个矩阵,但随后仅读取上三角或下三角。然后,他们可能会在计算过程中使用额外的空间来存储临时数据。

但是,如果存储确实是一个问题,那么只需将n(n+1)/2元素存储在一个一维数组中即可构成上三角形。如果这使您的访问变得复杂,只需定义一组帮助器函数即可。

在C中访问矩阵matA,您可以定义一个宏:

#define A(i,j, dim) ((i <= j)?matA[i*dim + j]:matA[j*dim + i])

那么您几乎可以正常访问阵列。

关于language-agnostic - 如何存储对称矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3187957/

相关文章:

c# - 检测互联网连接是否繁忙

math - float 学有问题吗?

python - python 的 random.shuffle 出现问题

java - 连接所有点的直线算法,没有对角线

ruby-on-rails - 如何自动找到用户的位置?

algorithm - 有什么快速的方法可以生成按其乘积排序的笛卡尔坐标对吗?

algorithm - 简化省份生成

python - 两个 Pandas 数据帧的相关矩阵,具有 P 值

python - 在 2D numpy 数组的子矩阵上高效运行

matlab - 矩阵列的随机选择