矩阵到向量C++

Matrix to vectors C++

本文关键字:C++ 向量      更新时间:2023-10-16

我使用的是C++
我有以下矩阵:

{1,2,3,4,5}
{6,7,8,9,10}
{11,12,13,14,15}
{16,17,18,19,20}
{21,22,23,24,25}

我想将矩阵转换为5个向量,如下所示:

a[5] = {1,6,11,16,21};
b[5] = {2,7,12,17,22};
c[5] = {3,8,13,18,23};
d[5] = {4,9,14,19,24};
e[5] = {5,10,15,20,25};

我想把每个矩阵列转换成向量
我有一个代码,它取5个矢量并将其转换为矩阵:

typedef int *pInt;
//Each element of arr is a int-type pointer
 pInt arr[5] = {a, b, c, d, e};
 int matrix[5][5] = {0};
 for(int i = 0; i < 5; ++i){
     for(int j = 0 ; j < 5; ++j){
         matrix[i][j] = arr[j][i];
     }
 }

那么如何将矩阵转换为向量呢?

以下代码完成任务:

int n=5;
int** vec = new int*[n];
for(int j=0;j<n;j++){
    vec[j] = new int[n];
    for(int i=0;i<n;i++){
        vec[j][i] = matrix[i][j];
    }
}
for(int i=0;i<n;i++){
    cout<<"Vector: "<<i<<endl;
    for(int j=0;j<n;j++){
        cout<<vec[i][j]<<" ";
    }
    cout<<endl;
}

您正在通过int** vec = new int*[n]创建整数指针数组
这里,vec[j]将表示第j个向量(array),并由vec[j] = new int[n]

创建

如果我说对了。对于每一个i(行),您将填充一个不同的数组。类似这样的东西:

for(int i = 0; i < 5; ++i)
{
    for(int j = 0 ; j < 5; ++j)
    {
        if(i == 0)
        {
            //fill the first vector
        }
    }
}

我知道你要求代码从矩阵转换为向量,然后将这些新向量转换为翻转矩阵,但你可以一步完成整个过程。

int n = 5;
int vec[n][n];
for(int i = 0; i < n; ++i)
{
    for(int j = 0; j < n; ++j)
    {
        vec[i][j] = matrix[j][i];
    }
}

因为你只想让行成为新矩阵中的列,所以你所要做的就是交换行和列迭代器(即矩阵的标准表示法是matrix[row][column],所以上面的代码迭代vec的第一行,同时也迭代第二个矩阵的第一列,创建你想要的反转)

还要注意,尽管这些东西在数学中是矩阵和向量,但实际使用的数据结构是数组和2-D数组(或数组数组)。