您好,感谢您抽出宝贵时间阅读我的问题,
我有一个随机生成的布尔值矩阵,我想要做的是将矩阵的每个单独的单元格与周围环境进行比较,周围环境我指的是左边,右边,顶部,底部和所有4的单元格对角线。如果周围的单元格为真,我需要它返回“1”,如果为false,则为“0”,这样我可以添加围绕单个单元格的真假单元格的数量,因此输出将类似于“1” + 1 + 1 + 0等“。我很抱歉,如果我解释得不好,如果需要更多信息,请告诉我。
答案 0 :(得分:3)
实现这一点的最简单方法是嵌套两个for
循环,一个用于x,一个用于y,以及一个值为[-1,0,1]的数组。确保考虑矩阵的边界,并且不要添加当前单元格的值。
一个注意事项:这将是一个将代码分成两个方法的好地方,一个执行循环并使用坐标调用另一个,而另一个执行边缘情况检查并返回结果。
答案 1 :(得分:3)
您在矩阵上应用two-dimensional convolution,其内核大小为3:
1 1 1
1 0 1
1 1 1
(如果您打算在总和中包含当前单元格,则中间应为1而不是0)。
您可以对内核进行硬编码,或者为了更好和更通用的代码,接受3-by-3内核作为输入。如果您不需要通用解决方案,您可以按照syrion的建议。要将布尔值转换为1和0,您可以执行以下操作:cellNum = cellValue ? 1 : 0
。