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

如何在numpy矩阵中查找元素全为False的3x3子矩阵?

如何在8x8布尔型NumPy矩阵中查找全False的3x3子矩阵

我们需要检查一个8x8的布尔型NumPy矩阵中是否存在所有元素均为False的3x3子矩阵,以下是两种实现方式:

方法一:遍历所有可能的子矩阵

通过遍历矩阵中所有合法的3x3子矩阵起始位置,逐一检查子矩阵是否全为False:

import numpy as np

def has_all_false_3x3(matrix):
    # 遍历所有可行的起始行索引(0到5,因为8-3=5)
    for i in range(matrix.shape[0] - 2):
        # 遍历所有可行的起始列索引
        for j in range(matrix.shape[1] - 2):
            # 提取3x3子矩阵
            submatrix = matrix[i:i+3, j:j+3]
            # 检查子矩阵是否全部为False
            if np.all(submatrix == False):
                return True
    # 遍历完所有子矩阵都未找到,返回False
    return False

方法二:利用滑动窗口优化(更高效)

使用NumPy的sliding_window_view生成所有3x3滑动窗口,批量检查是否存在符合条件的子矩阵:

import numpy as np

def has_all_false_3x3_optimized(matrix):
    # 生成所有3x3滑动窗口
    windows = np.lib.stride_tricks.sliding_window_view(matrix, window_shape=(3,3))
    # 检查是否存在任意一个窗口所有元素都是False
    return np.any(np.all(windows == False, axis=(2,3)))

测试示例

存在全False 3x3子矩阵的情况

matrix_with = np.array([[False, False, False, False, False, False, False, False],
                        [False, False, False, False, True, False, True, False],
                        [False, False, False, False, False, False, False, False],
                        [False, False, False, True, False, False, False, False],
                        [False, False, False, False, False, False, False, False],
                        [False, True, False, False, False, True, False, False],
                        [False, False, False, True, False, False, False, False],
                        [False, False, False, False, False, False, False, False]])

print(has_all_false_3x3(matrix_with))          # 输出: True
print(has_all_false_3x3_optimized(matrix_with)) # 输出: True

不存在全False 3x3子矩阵的情况

matrix_without = np.array([[False, False, False, False, False, False, False, False],
                           [False, True, False, True, False, True, False, False],
                           [False, True, False, False, True, False, False, True],
                           [False, False, False, False, False, False, False, False],
                           [False, True, False, True, False, True, False, False],
                           [False, False, True, False, False, False, True, False],
                           [False, True, False, False, True, False, False, False],
                           [False, False, False, True, False, False, True, False]])

print(has_all_false_3x3(matrix_without))          # 输出: False
print(has_all_false_3x3_optimized(matrix_without)) # 输出: False

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 07:24:22