Поддельные данные
a = np.array([[[1,1]],[[2,2]],[[3,3]]])
b = a + 10
c = b + 10
d = c + 10
e = np.stack((a,b,c,d))
Обычно лучше избегать циклов, если вы можете использовать весь массив
f = np.transpose(e, (0,3,1,2))
g = f / 255
>>> e.shape
(4, 3, 1, 2)
>>> f.shape
(4, 2, 3, 1)
или np.moveaxis
вместо transpose
f = np.moveaxis(e, 3, 1)
f = np.moveaxis(e, (1,2,3), (2,3,1))
Небольшое улучшение ~ 25% (на моей машине) может быть достигнуто путем создания массива заранее, чтобы принять результат деления:
a = np.array(np.random.rand(128,360,640,3)*255,dtype=np.uint8)
b = np.zeros((128,3,360,640), dtype=np.float32)
np.divide(np.moveaxis(a, (1,2,3), (2,3,1)), 255, out=b)