Я пытаюсь написать функцию, которая выполняет математическую операцию с массив и возвращает результат. Упрощенный пример может быть таким:
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)
, исходная функция кажется вдвое быстрее , чем функция на месте. Как это можно объяснить? Разве функция на месте не должна быть быстрее, поскольку ей не нужно выделять память?