是否可以在 Armadillo 中复制 MATLAB circshift 方法?

Is it possible to replicate MATLAB circshift approach in Armadillo?

我找到了 MATLAB 的这段代码,它可以让你使用 circshift 计算康威生命游戏的邻居数,我认为它与卷积有关(我的知识不是很自豪,仍在学习并且会喜欢你的解释正在发生的事情)

for t=1:T
neighbors = circshift(X, [1, 0]) + circshift(X, [-1, 0]) +  circshift(X, [0, 1]) +  circshift(X, [0, -1]) + ...
circshift(X, [1, 1]) + circshift(X, [-1, 1]) + circshift(X, [1, -1]) + circshift(X, [-1, -1]);

X(find(((neighbors > 3) | (neighbors < 2))  & X)) = 0;
X(find((neighbors == 3) & ~X)) = 1; 

我想做的是相同的,但在 C++ Armadillo 中。 是否有可能做到这一点?问,因为我还没有找到 circshift 函数,只是 shift() 或 conv2()

shift() 函数在 Matlab 中对于 vec 类型的工作方式类似,但对于 mat 您必须执行两次(在每个维度上),例如

arma::mat circshift(arma::mat A, int r, int c)
{
    return arma::shift(arma::shift(A,r,0),c,1);
}