Numpy нарезка нескольких 2D диапазонов с массивом индексов - PullRequest
1 голос
/ 09 марта 2020

Учитывая массив Nx2 из N точек ([строка, столбец]):

points = np.array([
  [r1, c1],
  [r2, c2],
  ...
])

И учитывая двумерную матрицу, с которой я хочу работать:

img = np.arange(400).reshape(20,20)

Я ищу эффективный способ взять 2D-срезы img с использованием индексов.

Так что, если я хочу срез с заданной высотой h и шириной w, псевдокод будет:

p_rows = points[:,0]
p_cols = points[:,1]
patches = img[p_rows:p_rows+h, p_cols:p_cols+w]

Так, что результатом будет матрица Nxhxw. Но, увы, вещание не спасло меня в этот раз.

Я смотрел на np.r_, np.select, np.lib.stride_tricks.as_strided, np.take ... Но пока не повезло.

1 Ответ

1 голос
/ 09 марта 2020

Мы можем использовать np.lib.stride_tricks.as_strided на основе scikit-image's view_as_windows, чтобы получить скольжение windows. Подробнее об использовании as_strided на основе view_as_windows. Затем, индексирование в windows с расширенным индексированием с использованием этих индексов из points решает это для нас!

from skimage.util.shape import view_as_windows

w = view_as_windows(img,(h,w))
out = w[points[:,0],points[:,1]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...