目前我可以使用现有矩阵的连续视图的相同内存生成矩阵,以便可以有效地更改现有矩阵的子视图。 可以按如下方式完成
mat mat1(4,4,fill::zeros);
double *auxmem = mat1.memptr();
mat sub1 = mat(auxmem[startIndex], n_rows, n_cols, false, false);
但是对于非连续的视图,不能这样做。 在阅读了关于subview和subview_elem2的头文件后,我找到了另一种方法来完成它。
subview_elem2<unsigned, umat, umat> sub1 = mat1.submat(v, v);//non-contiguous index
subview<unsigned> sub2 = mat2.submat(1, 1, 2, 2); //contiguous index
更改sub1
可能会影响mat1
,而更改sub2
可能会影响mat2
,这似乎是达到目标的更好方式。
但sub1
和sub2
不是Mat<double>
的类型,因此无法对其进行大量操作。是否有任何体面的方法来生成具有相同内存的非连续子视图?谢谢。