Изменение массива вывода функции numpy на месте

Я пытаюсь написать функцию, которая выполняет математическую операцию с массив и возвращает результат. Упрощенный пример может быть таким:

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)

, исходная функция кажется вдвое быстрее , чем функция на месте. Как это можно объяснить? Разве функция на месте не должна быть быстрее, поскольку ей не нужно выделять память?

6
задан Saullo G. P. Castro 12 May 2013 в 21:47
поделиться