Это мой оригинальный 2d массив A
[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 2, 2, 2, 2, 2, 2, 0, 0, 0],
[0, 2, 2, 2, 2, 2, 2, 0, 0, 0],
[0, 2, 2, 2, 2, 2, 2, 0, 0, 0],
[0, 2, 2, 2, 2, 2, 2, 0, 0, 0],
[0, 2, 2, 8, 8, 8, 2, 0, 0, 0],
[0, 2, 2, 8, 8, 8, 2, 0, 0, 0],
[0, 0, 0, 8, 8, 8, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
Допустим, я хочу вернуть 3x3 подматрицу 8 в середине. Я сделал булеву маску с этим выражением A == 8
, и она выглядит следующим образом.
array([[False, False, False, False, False, False, False, False, False,
False],
[False, False, False, False, False, False, False, False, False,
False],
[False, False, False, False, False, False, False, False, False,
False],
[False, False, False, False, False, False, False, False, False,
False],
[False, False, False, False, False, False, False, False, False,
False],
[False, False, False, True, True, True, False, False, False,
False],
[False, False, False, True, True, True, False, False, False,
False],
[False, False, False, True, True, True, False, False, False,
False],
[False, False, False, False, False, False, False, False, False,
False],
[False, False, False, False, False, False, False, False, False,
False]])
Это точка, в которой я застрял. Как я могу вернуть подматрицу с этой логической маской? Если я сделаю A[A == 8]
, он вернет плоский массив из 8, например,
array([8, 8, 8, 8, 8, 8, 8, 8, 8])
Другой способ - получить номера строк и столбцов с помощью np.where(A == 8)
, который возвращает (array([5, 5, 5, 6, 6, 6, 7, 7, 7]), array([3, 4, 5, 3, 4, 5, 3, 4, 5]))
. Как я могу вернуть матрицу, используя их?
Есть ли лучший подход к этой проблеме?