【发布时间】:2018-02-19 14:12:49
【问题描述】:
我正在尝试解决以下问题。假设我有一个大小为 n 的对称矩阵。我想获取所有“重要值”,并将它们存储到一个向量中。让我举一个例子来更好地解释它。
假设我有以下矩阵A = [1, 2, 3 // 2, 5, 6 // 3, 6, 9]。我想定义大小为n*(n+1)/2 的向量:
V = [A(0,0), A(0,1), A(0,2), A(1,1), A(1,2), A(2,2) ]
我想找到一个函数,它接收两个整数i 和j 作为输入,并输出矩阵的对应值。问题是我不想直接访问矩阵,而是想访问向量。
到目前为止,这是我的推理。如果我有j < i 的输入,我只需交换它们,因为矩阵是对称的。如果我有那个i == 0,那么数组中的位置就是j。如果不是这样,我想我需要做这样的事情。 (n是矩阵的维数,position是数组时需要的整数。)
int position = 0;
for(int k = 0; k < i; k++){
position = position + (n-k);
}
position = position + j % i;
但是,此代码失败。我想我已经接近解决方案,但我错过了一些东西。有什么帮助吗?
【问题讨论】:
-
您要解决的实际问题是什么?你有一个三角矩阵(因为它是对称的),你只想存储一半?这是一个众所周知的问题,例如 existing matrix storage schemes,例如 packed storage。
-
是的!类似的东西,虽然我想逐行而不是逐列存储值。我会仔细研究你的链接!