Matlab实现6×6 0-1矩阵邻域条件更新代码开发需求
MATLAB实现:基于邻域规则更新6×6 0-1矩阵
首先我先把你提到的规则补全为通用的邻域更新逻辑(如果实际规则有差异,直接替换对应判断部分即可):
输入为6×6的0-1矩阵,遍历每个元素作为中心,根据其8邻域(上下左右+四个对角线)的元素情况更新值:
- 当中心元素为1时:
- 邻域中1的数量为0或1 → 中心变为0(孤立的1被消除)
- 邻域中1的数量为2或3 → 中心保持1(稳定存活)
- 邻域中1的数量≥4 → 中心变为0(过度拥挤死亡)
- 当中心元素为0时:
- 邻域中1的数量恰好为3 → 中心变为1(繁殖)
- 其他情况保持0
完整MATLAB代码
function newMatrix = updateBinaryMatrix(originalMatrix) % 校验输入矩阵的尺寸和取值合法性 if size(originalMatrix) ~= [6 6] error('输入矩阵必须是6×6的0-1矩阵!'); end if ~all(originalMatrix(:) == 0 | originalMatrix(:) == 1) error('输入矩阵只能包含0和1两种值!'); end newMatrix = zeros(6,6); % 初始化新矩阵,避免更新时覆盖原始数据 % 遍历矩阵的每个元素 for i = 1:6 for j = 1:6 centerVal = originalMatrix(i,j); neighborCount = 0; % 统计邻域内1的数量 % 遍历8邻域的所有偏移量 for di = -1:1 for dj = -1:1 if di == 0 && dj == 0 continue; % 跳过中心元素本身 end % 计算邻域元素的坐标 ni = i + di; nj = j + dj; % 边界处理:矩阵外的元素视为0 if ni >= 1 && ni <=6 && nj >=1 && nj <=6 neighborCount = neighborCount + originalMatrix(ni,nj); end end end % 根据规则更新当前元素值 if centerVal == 1 if neighborCount <= 1 || neighborCount >=4 newMatrix(i,j) = 0; else newMatrix(i,j) = 1; end else newMatrix(i,j) = (neighborCount == 3) ? 1 : 0; end end end end
代码使用示例
% 生成一个随机的6×6 0-1测试矩阵 inputMatrix = randi([0 1],6,6); disp('输入矩阵:'); disp(inputMatrix); % 调用函数生成更新后的矩阵 outputMatrix = updateBinaryMatrix(inputMatrix); disp('输出矩阵:'); disp(outputMatrix);
代码说明
- 输入校验:先检查矩阵尺寸和元素取值,提前拦截非法输入避免运行报错。
- 邻域计数:通过双层循环遍历8个邻域方向,对矩阵边界外的元素默认视为0(你也可以根据需求改成循环边界或忽略边界元素,只需调整坐标判断逻辑)。
- 规则逻辑:新矩阵独立初始化,确保更新过程中不会因为覆盖原始值而影响后续元素的计算。如果你的实际规则和我补全的不同,直接修改
根据规则更新当前元素值部分的条件判断即可。
内容的提问来源于stack exchange,提问作者Daniel Arocha
相关产品推荐
相关产品推荐

