2017-10-12 8 views
2

NumPyツールのみを使用して配列を作成します。そこには次のようになります。NumPyで配列の端にある値を変更する

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

私のコードであること:

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) 

簡単に(短い)のように、このような配列を作成することが可能になりますかしら?

答えて

3

2s(エッジ値)とアプローチ#1

初期及び中間部に1sを割り当てる -

x = 2*np.ones((5, 5), dtype = int) 
x[1:-1,1:-1] = 1 

アプローチ#2

短い方法 -

x = np.ones((5, 5), dtype = int) 
x[:,[0,-1]] = x[[0,-1]] = 2 

アプローチ#3

2D畳み込みによるワンライナー -

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

ありがとう!それは間違いなく助ける:) – Hendrra

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 
1
x = numpy.full((5,5), 2, dtype=int) 
x[1:-1,1:-1] = 1 
関連する問題