У меня есть массив 4D с формой (4, 320, 528, 279), который на самом деле представляет собой набор данных из 4 стеков трехмерных изображений.
Я пытаюсь добиться нормализации каждого пикселякаждого 3D-изображения между всеми образцами. Допустим, первые значения пикселей с координатами (0,0,0) на четырех изображениях равны [140., 20., 10., 220.]. Я хотел бы изменить эти значения таким образом, чтобы они стали: [0.61904762, 0.04761905, 0., 1.].
Я написал скрипт, который предположительно достигает этого:
def NormalizeMatrix(mat) :
mat = np.array(mat);
sink = mat.copy();
for i in np.arange(mat.shape[1]) :
for j in np.arange(mat.shape[2]) :
for k in np.arange(mat.shape[3]) :
PixelValues = mat[:,i,j,k];
Min = float(PixelValues.min());
Max = float(PixelValues.max());
if Max-Min != 0. :
sink[:,i,j,k] = (PixelValues - Min) / (Max - Min);
else :
sink[:,i,j,k] = np.full_like(PixelValues, 0.);
return sink;
Но этодействительно очень медленно!
Как я могу сделать это быстрее?
Есть идеи?
Том