如何在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
相关产品推荐
相关产品推荐

