我为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);
}