Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何获取矩阵块的指针? 我在C++中使用了特征库。_C++_Matrix_Eigen - Fatal编程技术网

如何获取矩阵块的指针? 我在C++中使用了特征库。

如何获取矩阵块的指针? 我在C++中使用了特征库。,c++,matrix,eigen,C++,Matrix,Eigen,我的问题是: 我有一个固定大小的矩阵a,现在我想把a(a.block(0,0,flag,flag))的一个块的指针传递到一个函数中。 例如: int flag = 2; Eigen::Matrix<int,3,3> A; A<<1,2,3 4,5,6 7,8,9; int标志=2; 特征矩阵A; 我认为你填充矩阵的值的顺序应该是预期的。您正在按顺序存储值[1,9]。因此,当您试图从矩阵中检索这些值时,这就是您得到的结果。我对Eigen不太

我的问题是: 我有一个固定大小的矩阵a,现在我想把a(
a.block(0,0,flag,flag)
)的一个块的指针传递到一个函数中。 例如:

 int flag = 2;
 Eigen::Matrix<int,3,3> A;
 A<<1,2,3
    4,5,6
    7,8,9;
    
int标志=2;
特征矩阵A;

我认为你填充矩阵的值的顺序应该是预期的。您正在按顺序存储值
[1,9]
。因此,当您试图从矩阵中检索这些值时,这就是您得到的结果。我对Eigen不太熟悉,因为我只使用过几次,但他们的API中可能有一些功能,允许您通过列或行的主要顺序以及转置、反转(如果有效)、标识和其他有效矩阵属性检索数据。您可能需要对他们的文档进行更多的阅读。至于使用更快/更好的操作而不是循环,这取决于矩阵的大小,您可以使用基于堆栈的缓冲区,以利用局部性并最大限度地减少缓存未命中。此外,根据您正在使用的编译器和系统架构,您甚至可以使用内联汇编来使用向量化寄存器和向量化指令(通常称为向量内部函数)。有一些Youtube频道和视频提供了示例,javidx9、Jason Turner和其他可以在这里找到的示例。我将上述内容作为评论,并没有提供实际答案,因为它们似乎是相对基于意见的,因为有几种方法可以实现您所寻找的功能。因此,我将它们作为注释提供给您,以帮助您找到适合您具体问题的解决方案。这是另一个搜索查询:指针指向一个固态内存。块不是固体存储器。一般来说,您不能加入这些内容。您可以向传递指针的函数添加对跨步或间接索引的支持,或者传递块(为什么不能将块传递给函数?),或者将块元素复制到固态内存存储器中。您的函数可以接受
Eigen::Ref
而不是
int*
。但不确定“函数”应该做什么(提示:提供一个!)