Armadillo中如何通过多列指针构造矩阵实例?
Armadillo库多列指针式操作实现方法
Armadillo中没有直接提供Multiple_colptr这类方法,但可以通过两种方式实现你要的多列视图操作:
方法一:直接使用.cols()创建视图
Armadillo的.cols(start_col, end_col)方法默认返回原矩阵对应列的视图(不拷贝数据),和用指针构造vec的效果一致,直接操作视图就会修改原矩阵:
mat X(nrow, ncol); mat Y = X.cols(0, 3); // Y是X第0到3列的视图,无内存拷贝 // 对Y的修改会直接作用到X的对应列
方法二:利用列优先存储特性手动构造
Armadillo矩阵采用列优先存储,连续的多列在内存中是连续排布的,起始地址就是起始列的指针。你可以直接用起始列的指针,配合行数和列数来构造子矩阵视图:
mat X(nrow, ncol); // 第三个参数是列数(0到3共4列),后两个参数指定不拷贝数据、使用原内存所有权 mat Y(X.colptr(0), nrow, 4, false, true); X.cols(0, 3) = Y;
内容的提问来源于stack exchange,提问作者mert
相关产品推荐
相关产品推荐

