Наиболее эффективный способ применения операции к каждому элементу массива Numpy

#python #python-3.x #numpy

Вопрос:

Предположим, у меня есть функция, которая принимает массив фигур numpy (m, k) , и я хочу применить эту функцию к каждому элементу массива фигур numpy (n, m, k) . Наивный подход состоит в том, чтобы выполнить итерацию по заданному массиву numpy и добавить преобразованный элемент в пустой массив numpy формы (0, m, k)

 result = np.empty(shape=(0, m, k))
for element in elements:
    result = np.append(result, [some_operation(element)], axis=0)
 

Каков эффективный способ применить некоторые, скажем, «операции» к массиву фигур numpy (n, m, k) ? Я думаю, что есть более «глупый» подход.

Большое спасибо.

Комментарии:

1. Добавление списка более эффективно

2. Многие функции и методы numpy могут работать с 3d-массивом, но, не зная, что находится в вашей функции, мы не можем предложить способ сделать это. Поэтому самый общий способ-повторить это первое измерение и собрать результаты. Если some_operation это достаточно сложно, механизм итерации не имеет большого значения; это вызов some_operation n раз, который займет большую часть времени. Но np.append это наименее эффективно; добавление списка лучше или назначение result[element, :,:] .

3. list(map(f, array)) немного быстрее, чем list.append цикл, особенно для очень больших массивов

Ответ №1:

Я думаю, что карта-наиболее подходящая функция для этого

Комментарии:

1. Спасибо, что было очень полезно!