配列に対して数学演算を実行し、結果を返す関数を作成しようとしています。簡単な例は次のとおりです。
def original_func(A):
return A[1:] + A[:-1]
高速化と、関数呼び出しごとに新しい出力配列の割り当てを回避するために、出力配列を引数として使用し、その場所で変更したいと考えています。
def inplace_func(A, out):
out[:] = A[1:] + A[:-1]
ただし、これら 2 つの関数を次のように呼び出すと、
A = numpy.random.rand(1000,1000)
out = numpy.empty((999,1000))
C = original_func(A)
inplace_func(A, out)
元の関数は、インプレース関数の2 倍の速さのようです。これはどのように説明できますか?メモリを割り当てる必要がないため、インプレース関数の方が高速であるべきではありませんか?