中間領域をプレースホルダー値 (私は -12345 を使用しました。実際のデータでは発生しないものはすべて機能します) に置き換えてから、その値と等しくないものをすべて選択できます。
>>> import numpy as np
>>> a = np.arange(1,26)
>>> a.shape = (5,5)
>>> a
array([[ 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10],
[11, 12, 13, 14, 15],
[16, 17, 18, 19, 20],
[21, 22, 23, 24, 25]])
>>> a[1:4,1:4] = -12345
>>> a
array([[ 1, 2, 3, 4, 5],
[ 6, -12345, -12345, -12345, 10],
[ 11, -12345, -12345, -12345, 15],
[ 16, -12345, -12345, -12345, 20],
[ 21, 22, 23, 24, 25]])
>>> a[a != -12345]
array([ 1, 2, 3, 4, 5, 6, 10, 11, 15, 16, 20, 21, 22, 23, 24, 25])
整数配列ではなく浮動小数点配列を使用する場合は、 NaNとisfiniteを使用して、もう少しエレガントに行うことができます。
>>> a = np.arange(1,26).astype('float32')
>>> a.shape = (5,5)
>>> a[1:4,1:4] = np.nan
>>> a
array([[ 1., 2., 3., 4., 5.],
[ 6., nan, nan, nan, 10.],
[ 11., nan, nan, nan, 15.],
[ 16., nan, nan, nan, 20.],
[ 21., 22., 23., 24., 25.]], dtype=float32)
>>> a[np.isfinite(a)]
array([ 1., 2., 3., 4., 5., 6., 10., 11., 15., 16., 20.,
21., 22., 23., 24., 25.], dtype=float32)