对称矩阵,值为C++向量

对称矩阵,值为C++向量,c++,matrix,C++,Matrix,我正在努力解决以下问题。假设我有一个大小为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

我正在努力解决以下问题。假设我有一个大小为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
int position = 0;
for(int k = 0; k < i; k++){
   position = position + (n-k);
}
position = position + j % i;
但是,此代码失败。我想我已经接近解决方案了,但我遗漏了一些东西。有什么帮助吗?

最后一个j%i应该是j-i

此外,循环本质上是在做

position = n + (n - 1) + ... + (n - i + 1);
可以简化为

position = (n * 2 - i + 1) * i / 2;
所以你可以简单地写

position = (n * 2 - i + 1) * i / 2 + j - i;


您可以简单地执行以下操作:

int myvector[matrix.size()];
int pos = 0;

for(int i = 0; i < matrix.size(); i++){
     for(int j = 0; j < matrix.size(); j++){
        if(j > i) myvector[pos++] = matrix[i][j];
        else myvector[pos++] = matrix[j][i];
     }
 }

你想解决的实际问题是什么?你有一个三角形矩阵,因为它是对称的,你只想存储一半?这是一个众所周知的问题,有很多类似的例子。是的!诸如此类,尽管我希望逐行存储值,而不是逐列存储值。我会仔细研究你的链接!
int myvector[matrix.size()];
int pos = 0;

for(int i = 0; i < matrix.size(); i++){
     for(int j = 0; j < matrix.size(); j++){
        if(j > i) myvector[pos++] = matrix[i][j];
        else myvector[pos++] = matrix[j][i];
     }
 }