是否可以在 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);
}
我找到了 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);
}