在本征中,如何将多个映射矩阵组合为矩阵数组
In Eigen, how to combine multiple mapped matrices as an array of matrices
我有一个类,它有多个映射矩阵作为成员。代码如下所示:
class MyClass {
public:
MyClass(int nrow, int ncol, int nmat) :
arr(new int [nmat*nrow*ncol]),
mat1(arr, nrow, ncol, Stride<Dynamic, Dynamic>(nrow * nmat, nmat)),
mat2(arr + 1, nrow, ncol, Stride<Dynamic, Dynamic>(nrow * nmat, nmat)) {}
int *arr;
Map<MatrixXi, 0, Stride<Dynamic, Dynamic> > mat1;
Map<MatrixXi, 0, Stride<Dynamic, Dynamic> > mat2;
};
int main()
{
int nmat = 2; // number of matrices
int nrow = 3; // number of rows for each matrix
int ncol = 4; // number of columns for each matrix
int arr_size = nmat*nrow*ncol; // size of the array.
MyClass A (nrow, ncol, nmat);
for (int i=0; i<arr_size; i++) {
A.arr[i] = i+1;
}
cout <<"mat1 = n"<<A.mat1<<endl;
cout <<"mat2 = n"<<A.mat2<<endl;
return 0;
}
现在我想mat1
和mat2
成为两个矩阵的数组,如mat[0]
和mat[1]
。我试图做这样的事情:
class MyClass {
public:
MyClass(int nrow, int ncol, int nmat) :
arr(new int [nmat*nrow*ncol]),
mat[0](arr, nrow, ncol, Stride<Dynamic, Dynamic>(nrow * nmat, nmat)),
mat[1](arr + 1, nrow, ncol, Stride<Dynamic, Dynamic>(nrow * nmat, nmat)) {}
int *arr;
Map<MatrixXi, 0, Stride<Dynamic, Dynamic> > mat[2];
};
它显然不起作用,因为我无法在初始值设定项列表中执行此操作。但是要从容不迫地进行这种映射,我必须使用初始值设定项列表。有人对如何实现这一点有想法吗?
使用 C++11 你可以做到这一点
class MyClass {
public:
MyClass(int* arr, int nrow, int ncol, int nmat) :
mat { { arr, nrow, ncol, Stride<Dynamic, Dynamic>(nrow * nmat, nmat) },
{ arr + 1, nrow, ncol, Stride<Dynamic, Dynamic>(nrow * nmat, nmat) } } {
std::cout << mat[1].data() - arr << std::endl;
std::cout << mat[1].rows() << std::endl;
std::cout << mat[1].cols() << std::endl;
std::cout << mat[1].innerStride() << std::endl;
std::cout << mat[1].outerStride() << std::endl;
}
Map<MatrixXi, 0, Stride<Dynamic, Dynamic> > mat[2];
};
它应该是以下链接中列表初始化的情况 5。
http://en.cppreference.com/w/cpp/language/list_initialization
另一方面,Eigen::Map
只是原始指针和维度的轻量级包装器。您可能希望将arr
、nrow
、ncol
和nmat
作为类成员,并动态构造Eigen::Map
。
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 将函数类成员映射到类本身内部
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 如何在 C# 中映射双 C 结构指针?
- 如何在C++中使用结构生成映射
- 使用std::函数映射对象方法
- 如何加载(或映射)文件部分的最大大小,但适合在Windows上的RAM
- 可组合的lambda/std::函数与std::可选
- C++映射分割错误(核心转储)
- 内联映射初始化的动态atexit析构函数崩溃
- C++ 有没有办法以相同的效率组合此列表和映射
- 如何使用 CGAL 简化组合映射
- 组合字符串 C++ 的映射和数组
- 我什么时候应该首选写入组合 CUDA 分配的映射主机内存
- 在C++中使用映射的值的组合
- 函数式c++使用auto映射组合器
- 在本征中,如何将多个映射矩阵组合为矩阵数组
- c++使用无序键组合进行映射查找
- Yaml-cpp(新API) -嵌套映射/序列组合和迭代