You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript如何分割矩阵并计算子矩阵的最小值与最大值

JavaScript实现2×2滑动子矩阵提取与最值计算

实现思路

这个需求的核心是步长为1的2×2滑动窗口逻辑,不需要提前把所有子矩阵拆出来单独存储,直接在遍历窗口的时候计算最值即可,步骤如下:

  • 先确定结果矩阵的尺寸:假设原始矩阵有M行N列,因为2×2窗口每次移动1格,不会超出原始矩阵边界,所以最终输出的最大值、最小值矩阵尺寸固定为(M-1)行(N-1)列,和3×3原始矩阵输出2×2结果的规律完全匹配。
  • 遍历所有窗口的左上角坐标:行索引i的遍历范围是0到M-2,列索引j的遍历范围是0到N-2,每个(i,j)坐标正好对应结果矩阵里一个值的位置。
  • 对每个窗口,提取覆盖到的4个元素:分别是当前位置右、下、右下三个相邻位置的元素,加上当前位置本身,正好组成2×2的子矩阵元素集合。
  • 对每个窗口的元素集合分别求最大值、最小值,填入结果矩阵对应的(i,j)位置即可,不需要额外存储拆分后的所有子矩阵,减少内存占用。

完整实现代码

const matrix = [
  [1,5,7],
  [7,3,5],
  [2,6,9]
];

function calcSubMatrixMaxMin(originMatrix) {
  const rowCount = originMatrix.length;
  const colCount = originMatrix[0].length;
  // 初始化两个结果矩阵
  const maxRes = Array.from({ length: rowCount - 1 }, () => []);
  const minRes = Array.from({ length: rowCount - 1 }, () => []);

  for (let i = 0; i < rowCount - 1; i++) {
    for (let j = 0; j < colCount - 1; j++) {
      // 取当前2*2窗口的四个元素
      const curWindowVals = [
        originMatrix[i][j],
        originMatrix[i][j + 1],
        originMatrix[i + 1][j],
        originMatrix[i + 1][j + 1]
      ];
      maxRes[i][j] = Math.max(...curWindowVals);
      minRes[i][j] = Math.min(...curWindowVals);
    }
  }

  return { maxMatrix: maxRes, minMatrix: minRes };
}

// 调用测试
const { maxMatrix, minMatrix } = calcSubMatrixMaxMin(matrix);
console.log(maxMatrix); // 输出 [[7,7],[7,9]],和预期一致
console.log(minMatrix); // 输出 [[1,3],[2,3]],和预期一致

扩展说明

如果后续需要调整子矩阵的大小、滑动步长,只需要修改遍历边界、窗口元素的提取逻辑即可,核心滑动遍历的思路不需要改动。


内容的提问来源于stack exchange,提问作者Collins

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 12:51:18