Changing values on the edges of an array in NumPy

时间:2017-10-12 09:46:40

标签: python arrays numpy

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 code:

import numpy as np
x = np.ones((5, 5), dtype = int)
x[0, :] = 2
x[4, :] = 2
x[:, 0] = 2
x[:, 4] = 2
print(x)

I wonder if it is possible to create an array like this in an easier (shorter) way?

3 个答案:

答案 0 :(得分:5)

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]])

答案 1 :(得分:2)

import numpy as np

a = np.ones((5, 5))
b = np.pad(a[1:-1,1:-1], pad_width=((1, 1), (1, 1)), mode='constant', 
constant_values=2)
print b

答案 2 :(得分:1)

x = numpy.full((5,5), 2, dtype=int)
x[1:-1,1:-1] = 1