使用J语言查找二进制矩阵中1的4邻域的更精简实现方案
最优精简实现
比你原有写法短5个字符,功能完全一致:
+/+/(4 2$1 0 _1 0 0 1 0 _1)&|.M
如果需要严格输出你示例中的01邻域标记矩阵,只需要多3个字符:
0<+/+/(4 2$1 0 _1 0 0 1 0 _1)&|.M
优化说明
你原有写法中构造4邻域偏移矩阵的|:i:1*(2 2)$1 0 0 1可以直接替换为4 2$1 0 _1 0 0 1 0 _1,直接硬编码4个4邻域的偏移量,省去了矩阵乘法、转置、2x2单位矩阵构造的冗余步骤,字符数更少,执行效率也更高。
如果需要避免矩阵边缘移位绕回的问题,给移位操作加补0修饰符即可:
+/+/(4 2$1 0 _1 0 0 1 0 _1)&|.!.0 M
内容的提问来源于stack exchange,提问作者N Matteson
相关产品推荐
相关产品推荐

