检测特殊2 × 22×2大量零和一的矩阵

计算科学 矩阵 麻木的
2021-12-25 12:47:46

我有一大堆零和一,我需要计算

0 1     1 0     0 0     1 1
0 1,    1 0,    1 1,    0 0

我想排除所有其他2×2子矩阵...例如

0 1     1 1
0 0,    1 0,    etc.

在空间2×2二元矩阵有24=16元素,我想挑出这 4 个矩阵。我不能使用线性条件,因为

0 1     0 0   0 1
0 1  +  1 1 = 1 0

可以显式编写一个布尔值来显式检查这些,但是我失去了美妙的 numpy 速度......

1个回答

假设您试图排除相邻的子矩阵,您可以构建一个表示2×2二进制子矩阵,然后检查有效类型的列表。IE,

# Represent 2 by 2 submatrices of A in binary
subs = A[::2,::2]+2*A[::2,1::2]+4*A[1::2,::2]+8*A[1::2,1::2]
allowed = ... # List of submatrices to count expressed in binary
for a in allowed:
  print('count %d = %d'%(a,sum(subs==a))