I am to create an array using only NumPy tools. There it is:
[[2 2 2 2 2]
[2 1 1 1 2]
[2 1 1 1 2]
[2 1 1 1 2]
[2 2 2 2 2]]
That is my
Approach #1
Initialize with 2s (edge values) and assign 1s in middle portion -
x = 2*np.ones((5, 5), dtype = int)
x[1:-1,1:-1] = 1
Approach #2
Another short way -
x = np.ones((5, 5), dtype = int)
x[:,[0,-1]] = x[[0,-1]] = 2
Approach #3
One-liner with 2D convolution -
In [302]: from scipy.signal import convolve2d
In [303]: (convolve2d(np.ones((5,5)), np.ones((3,3)),'same')<9)+1
Out[303]:
array([[2, 2, 2, 2, 2],
[2, 1, 1, 1, 2],
[2, 1, 1, 1, 2],
[2, 1, 1, 1, 2],
[2, 2, 2, 2, 2]])