如何将列向量转换为 MxN 矩阵
How to convert column vector into MxN matrix?
我对C++相对较新,有点陷入这个问题。我有 999x1 的点坐标矢量,我想以 dyananamal 的方式将其转换为 333x3 矩阵。除此之外,我为一个项目使用不同的 Cpp 文件,因此读取点集的函数位于不同的文件中。如何制作这个矩阵以及如何在我的主代码中访问它?我尝试使用vector<vector<float> > Mymatrix
东西,但是您需要在这种定义中指定行和列大小,直到我读取文件才能获得。如果我尝试在读取点集文件的函数中声明上面的 Mymatrix 变量,它的范围会受到限制,我不能在 main.cpp 中使用该 Mymatrix。在这里编写代码有点困难,因为它与其他文件有很多链接。我希望你有我的问题!请帮助我解决这个问题...提前感谢!
向量实际上只是一个数组的容器。所以基本上你有一个int A[999]
,想把它转换成int M[333][3]
;考虑到在内存中,一维和二维数组都存储在连续的内存区域中,您可以通过多种方式实现此目的:
- use a pointer and two indexes i, j: the first 3 elements are your first row,
the next 3 elements your second row and so on.
int vector<int> v;
int *p, i=0,j=0; // i=[0..332], j=[0..2]
p=&v[0];
*(p+(i*3)+j); //this is the same as p[i][j];
或者声明矩阵(为其分配静态或动态内存)并复制矩阵中的所有元素:
int M[333][3]; //i'll go with static allocation for this example
for(i=0;i<333;i++)
for(j=0;j<3;j++)
M[i][j] = v[i*3 + j];
选择您想要的方法 - 第一个的优点是它不会占用额外的内存。
您可以将 MyMatrix 创建为指针,并作为参数传递给函数:
vector<vector<float> >* Mymatrix; //Don't forget to initialize the pointer
functionThatReadsFiles(Mymatrix); //That function makes changes to Mymatrix
这样,您在"functionThatReadsFiles"中对Mymatrix所做的任何更改都将在其调用后保留。无论如何,在尝试此操作之前,请确保您完全了解如何使用指针进行操作。
正如@erlc所说,您还可以使用以下方式声明您的函数:
void functionThatReadsFiles(vector<vector<float> >& Mymatrix);
并调用它正常调用(没有指针),更改将再次保留在您的 Mymatrix 中。
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 使用std::vector的OpenCL矩阵乘法
- 使用C++中的模板和运算符重载执行矩阵运算
- Eigen如何在容器循环中干净地附加矩阵
- 当在带有Eigen的C++中使用GDB时,我如何才能看到更多的大矩阵
- 具有N列和N行的矩阵,列必须具有N-1、N-2等值
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- GCC本机矩阵运算库
- 矩阵向量乘法(cublasDgemv)返回零
- 以螺旋方式打印矩阵的程序.(工作不好)
- OpenCV C++.快速计算混淆矩阵
- 特征::矩阵<双精度,1,3> 结构类型函数中的返回类型函数
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 旋转模型矩阵时的形状失真
- 讨论 - 创建矩阵时的数组与向量的向量 - 什么是最实用的选择
- 如何在cuSparse中得到稀疏矩阵的对角线
- 将特征矩阵的向量设置为0
- 在CUDA中使用小M的两个MXN矩阵执行矢量点产品的最快方法是什么?
- 我怎么能像 numpy 那样从 MxN 矩阵中减去 1xN 特征矩阵
- 如何将列向量转换为 MxN 矩阵