Каков наиболее эффективный способ нормализации массива 4D? - PullRequest
0 голосов
/ 16 октября 2019

У меня есть массив 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;

Но этодействительно очень медленно!

Как я могу сделать это быстрее?

Есть идеи?

Том

1 Ответ

0 голосов
/ 16 октября 2019

Я думаю, что в конце концов я нашел довольно быстрый путь, который на самом деле идет по пути user3483203:

def NormalizeMatrix(mat) :

    mat = np.array(mat);
    minMat = np.min(mat, axis=0, keepdims=1);
    maxMat = np.max(mat, axis=0, keepdims=1);

    sink = (mat - minMat)/ (maxMat - minMat);

    return sink;

Это займет 5-10 секунд вместо часов на моей машине:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...