Я пытаюсь написать функцию, которая выполняет математическую операцию над массивом и возвращает результат. Упрощенный пример может быть:
def original_func(A):
return A[1:] + A[:-1]
Для ускорения и во избежание выделения нового выходного массива для каждого вызова функции я хотел бы иметь выходной массив в качестве аргумента и изменить его на месте:
def inplace_func(A, out):
out[:] = A[1:] + A[:-1]
Однако при вызове этих двух функций следующим образом,
A = numpy.random.rand(1000,1000)
out = numpy.empty((999,1000))
C = original_func(A)
inplace_func(A, out)
кажется, что исходная функция в два раза быстрее , чем функция на месте. Как это можно объяснить? Разве функция на месте не должна быть быстрее, поскольку ей не нужно выделять память?