You can replace the middle region with some placeholder value (I used -12345, everything that cannot happen in your actual data will work), then select everything that is not equal to this value:
>>> 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])
If you use a float array and not an integer array, you can do it a bit more elegantly using NaN and 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)