Проблемы с производительностью при использовании numpy.array () для создания 4-мерного ndarray - PullRequest
0 голосов
/ 28 октября 2019

Как часть службы python, мне нужно выполнить некоторые вычисления для каждого запроса. Расчеты легко выполнить для массивов numpy, поэтому каждый раз, когда я получаю запрос, я создаю около 10 4D-массивов в библиотеке numpy с помощью функции array (). Я заметил, что это создание занимает несколько сотен мс. Есть ли способ ускорить его?

Размеры массивов имеют порядок [10, 10, 20, 50]. Общее количество элементов в 10 массивах составляет от 2 до 2,5 млн.

Я испробовал 2 метода для создания массива. Метод 1 создает 4D массивы на лету. Метод 2 создает массивы apriori и заполняет их данными для каждого запроса при обработке запросов.

        start_numpy_conversion = time.perf_counter()
        # method 1 - creating the numpy fresh for every query
        fv_dict = {}
        for key, value in input_dict.items():
            fv_dict[key] = numpy.array(value)

        # method 2 - using the same numpy array for every query
        # fv_dict = self.input_dictionary
        # for key, value in input_dict.items():
        #     fv_dict_value = fv_dict[key]
        #     # print("key {} shape {}".format(key, fv_dict_value.shape), flush=True)
        #     for first in range(len(value)):
        #         for second in range(len(value[first])):
        #             for third in range(len(value[first][second])):
        #                 for fourth in range(len(value[first][second][third])):
        #                     fv_dict_value[first, second, third, fourth] = value[first][second][third][fourth]
        end_numpy_conversion = time.perf_counter()

В приведенном выше методе 1 требуется около 150 мс, а метод 2 - около 550 мс.

Поискнекоторая помощь в улучшении этого общего времени создания массива.

...