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

Posted

技术标签:

【中文标题】是否可以在犰狳中复制 MATLAB circshift 方法?【英文标题】:Is it possible to replicate MATLAB circshift approach in Armadillo? 【发布时间】:2020-07-13 23:30:13 【问题描述】:

我为 MATLAB 找到了这段代码,它可以让您使用 circshift 计算 Conway 的生命游戏中的邻居,我认为这与卷积有关(对我的知识不太自豪,仍在学习,希望您能解释一下正在发生)

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()

【问题讨论】:

【参考方案1】:

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 方法?的主要内容,如果未能解决你的问题,请参考以下文章

犰狳 + Matlab Mex 段错误

犰狳库是不是会减慢矩阵运算的执行速度?

在 Ubuntu 14.04 和 matlab 2014Ra 上使用犰狳在 mex 中出现分段错误

如何传递 matlab::data::TypedArray<double> 作为指针在 MATLAB mex 文件中构造犰狳矩阵?

用于在 Windows 中的犰狳中构建 armaMex_demo.cpp 的 Matlab mex 命令

将具有外部依赖项的共享库集成到 MATLAB |即犰狳、LAPACK、BLAS