Pythonでは、これを行うことができます:
a = np.arange(100)
print id(a) # shows some number
a[:] = np.cumsum(a)
print(id(a)) # shows the same number
ここで行ったことは、 の内容をa
その cumsum に置き換えることでした。前後のアドレスは同じです。
それでは、R で試してみましょう。
install.packages('pryr')
library(pryr)
a = 0:99
print(address(a)) # shows some number
a[1:length(a)] = cumsum(a)
print(address(a)) # shows a different number!
問題は、R で既に割り当てられているメモリを計算の結果で上書きするにはどうすればよいかということです。R と Rcpp (C++ でコードを記述し、R から呼び出すことで不要な割り当てを避けることができます) でベクトル演算を行うと、この種のものが欠如しているため、パフォーマンスに大きな違いが生じるようです。
24 個の物理コアと 128 GB の RAM を搭載した Ubuntu Linux 10.04 で R 3.1.1 を使用しています。