犰狳中的多个.colptr

问题描述 投票:0回答:1

在 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;
pointers armadillo
1个回答
0
投票

这可以直接使用

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 函数来做到这一点。上面的示例不包括边界检查。

© www.soinside.com 2019 - 2024. All rights reserved.