矩阵到向量 C++

Posted

技术标签:

【中文标题】矩阵到向量 C++【英文标题】:Matrix to vectors C++ 【发布时间】:2016-05-05 12:49:13 【问题描述】:

我正在使用 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];
     
 

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

【问题讨论】:

您是否有任何限制,例如:您是否必须保持矩阵中的值完整,矩阵的大小可以变化还是修复,矩阵有多大,您是否尝试优化对于某些东西(速度、内存)等? 【参考方案1】:

以下代码完成工作:

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] 将代表第 jth 向量 (array) 并由 vec[j] = new int[n]

创建

【讨论】:

嗨,我刚试过你的代码,我认为它不适合我 @Evyatar 您遇到什么错误?我已经测试了代码,它可以按照您在问题中描述的那样工作。【参考方案2】:

如果我没听错的话。 对于每个 i(line),您将填充一个不同的数组。像这样的:

for(int i = 0; i < 5; ++i)

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

【讨论】:

是的。搞糊涂了。已编辑【参考方案3】:

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

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 的第一行,因为它还遍历第二个矩阵的第一列,创建您想要的反转)

还要注意,虽然这些东西是数学中的矩阵和向量,但您使用的实际数据结构是数组和二维数组(或数组的数组)。

【讨论】:

以上是关于矩阵到向量 C++的主要内容,如果未能解决你的问题,请参考以下文章

C++ 矩阵和向量设计

Eigen向量和矩阵的用法1(C++)

在 C++ 中对大输入实现矩阵的最有效方法?

在 C++ 中使用二维向量乘以矩阵

c++中的二维向量问题

向量到矩阵犰狳