#python #performance
#python #Производительность
Вопрос:
Я пишу код, который захватывает изображение с камеры в виде массива numpy, а затем разбивает его на квадранты. Моя цель — сделать это со скоростью видео, чтобы на каждом шаге требовалось как можно меньше времени. Прямо сейчас разбивка на квадранты — одно из моих замедлений (для разбиения изображения 4096×3000 требуется 15 мс). Есть ли более быстрый способ сделать это?
self.raw_img = frame
num_rows = int(self.raw_img.shape[0]/2.)
num_cols = int(self.raw_img.shape[1]/2.)
# Only initialize quadrant images one time
if self.quad_img == []:
self.quad_img = np.zeros((4,num_rows,num_cols))
self.quad_img[0] = self.raw_img[:num_rows,:num_cols]
self.quad_img[1] = self.raw_img[num_rows:,:num_cols]
self.quad_img[2] = self.raw_img[:num_rows,num_cols:]
self.quad_img[3] = self.raw_img[num_rows:,num_cols:]
Комментарии:
1. попробуйте использовать
numpy.split
2. Индексация Numpy очень эффективна. Создание фрагментов с индексацией фактически не копирует данные, а создает представление данных в памяти. Посмотрите здесь numpy.org/doc/stable/user/basics.indexing.html