У меня есть одномерный массив, который содержит некоторые видеоданные:
data=np.random.randint(0,high=255,size=(500*500*100),dtype=np.uint8)
imgs=np.reshape(data,(100, 500,500)) # 100 frames, 500x500 pixels
Я хочу выделить определенные области интереса (roi) вдоль всех кадров
idx=np.random.randint(0,high=500*500,size=(49, 300)) #300 rois, 49 points each
rois=imgs.reshape(100, -1)[:,idx]
Я сплющил каждыйкадр, а затем взял rois вдоль 1-го измерения.Реальный массив imgs
больше показанного здесь, и предыдущая операция индексирования может быть немного медленной.Если я изменю imgs
другим способом (см. Ниже), rois.size
будет таким же, и индексирование будет намного быстрее, но это приведет к неверным данным
%timeit imgs.reshape(100, -1)[:,idx] # 13 ms
%timeit imgs.reshape(-1, 100)[idx, :] # 1.2 ms, much faster but wrong data
В моем реальном коде разница будетпочти в 50 раз.Есть ли способ индексировать imgs
быстро?