0

我正在用Eigen作为我的线性代数后端编写一个神经网络类,我想知道如何创建一个数组,其中每个元素都有不同的类型,在运行时确定。

我发现了这个,但它对我不起作用。

我想要的只是能够使用类似数组的访问方法访问不同大小的矩阵,即vMatrix[i]。

编辑:

基类的原型:

template<typename T, unsigned _Rows, unsigned _Cols> Eigen::Matrix;

我正在尝试做的事情:

vector< DerivedMatrix > vMatrix;
vMatrix.push_back(some_5x4_matrix);
vMatrix.push_back(some_4x10_matrix);
vMatrix.push_back(some_10x1_matrix);

矩阵大小不是事先定义的。

因为我对 C 的了解比 C++ 多,所以我想了一种方法来解决这个问题:使用带有 void* 的 struct 和一些机制来存储项目类型或 row & col; 但由于我正在学习 C++,所以我想避免这种情况。

4

2 回答 2

0

如果您希望支持预先确定的有限类型集,则可以使用Boost Variant

您还可以使用Boost Any作为数组/向量的元素类型。

于 2013-05-27T21:02:45.903 回答
0

下面的片段怎么样?就动态大小而言,您可以使用 .resize() 函数随时调整矩阵的大小。这有帮助吗?

#include<iostream>
#include<vector>
#include <Eigen/Dense>
using namespace Eigen;
using namespace std;

int main(int argc,char **argv){
    vector<MatrixXf> A;
    MatrixXf P = MatrixXf::Random(2,3);
    MatrixXf Q = MatrixXf::Random(4,5);
    MatrixXf R = MatrixXf::Random(3,4);
    A.push_back(P);
    A.push_back(Q);
    A.push_back(R);
    cout<<A[0]<<endl<<A[1]<<endl<<A[2]<<endl;
    return 0;
}
于 2013-07-01T13:53:09.390 回答