Как сделать сетку с отверстиями в NumPy? - PullRequest
0 голосов
/ 09 мая 2018

Я понимаю, как создать простую сетку, подобную этой:

low1 = -1; high1 = 1;
n_p = 20
range1 = np.linspace(low1, high1,n_p/2, endpoint=False)
X = np.dstack(np.meshgrid(range1, range1)).reshape(-1, 2)

enter image description here

Но как лучше создать сетку, как на картинке ниже?

enter image description here

Сейчас я просто строю 8 прямоугольников и складываю их. Как лучше это сделать?

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Вы можете использовать маску bool:

low1 = -1; high1 = 1;
n_p = 20
range1 = np.linspace(low1, high1,n_p//2, endpoint=False)
X, Y = np.meshgrid(range1, range1)
mask = ~((X < 0.4) & (X > -0.4) & (Y < 0.4) & (Y > -0.4))
np.c_[X[mask], Y[mask]]
0 голосов
/ 09 мая 2018

Вы можете сначала создать внешний прямоугольник, а затем вынуть внутренний прямоугольник с фильтром:

x = np.linspace(-2, 2, 20, endpoint=False)
X = np.dstack(np.meshgrid(x, x)).reshape(-1, 2)       # outer rectangle

X[(np.abs(X + 0.1) > 1).any(1)].shape                 # take out the inner rectangle
# (300, 2)   300 = 20 * 20 (outer) - 10 * 10 (inner)
...