在 Armadillo 中,通过使用
.colptr( col_number )
有一个指向单个列的指针。所以,我们可以写,例如,
mat X(nrow, ncol);
vec y(X.colptr(0), nrow, false, true);
X.col(0) = y;
有没有办法对矩阵的多列执行此操作
X
例如
mat X(nrow, ncol);
mat Y(X.Multiple_colptr(0, 3), nrow, false, true);
X.cols(0, 3) = Y;
这可以直接使用
colptr
来完成。指针可以偏移:*(pointer + offset) == pointer[offset]
。因此,在 multiple_colptr
中实现所需功能的一个简单方法是抵消简单的 colptr
。考虑这个例子(并自己运行它):
mat a = mat(2, 2, arma::fill::randn);
vec b = vec(a.colptr(0), a.n_cols * a.n_rows);
a
中的所有条目将被复制以形成vec
中的4个元素b
。您可以通过改变 a.colptr(0)
中的指针和要复制的元素数量来获取任意数量的列(犰狳遵循列主排序)。
虽然这是可能的,但可能有更好的方法使用 Aramdillo 函数来做到这一点。上面的示例不包括边界检查。