矩阵到向量 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++的主要内容,如果未能解决你的问题,请参考以下文章