コメントをいただいた
> pythonは標準ではRで言うlistで配列を扱うので, 標準では速度的に不利です。それをRと同じようにベクトル(配列)で扱えるようにするのがnumpyですので,
> numpy.mean(numpy.arange(1,10000000))
> みたいにして比較するなら良いかと思います。
> 上記のpythonの例だと, Rで言うなれば x にたような比較になってしまっています。
> # つまりリスト処理のオーバーヘッドの計測をしてしまっている.
なるほど,遅すぎるとは思いました。
しかし,以下のようにしてみましたが,
>>> import numpy
>>> import time
>>> s = time.time()
>>> numpy.mean(numpy.arange(1,10000001))
5000000.5
>>> print(time.time()-s)
0.1522839069366455
しかしなおかつ,10倍ほど遅い(まあ,1秒以下なんだから,大人げなく目くじら立てるほどでもないが)
なお,重箱の隅突きで申し訳ないが,
numpy.arange(1,10000000)
ではなくて,
numpy.arange(1,10000001)
これも,python のやーーなところ(^_^)
=====
R でリストを使うと遅いだろうという指摘はごもっとも
> options(digits=16)
> system.time({
+ x = as.list(1:10000000)
+ Sum = 0
+ for (i in x) Sum = Sum+x[[i]]
+ print(Sum/length(x))
+ })
[1] 5000000.5
ユーザ システム 経過
0.68999999999999773 0.01800000000000068 0.70499999999992724
でも,list は使わないし...大部分は for のせいだし...
========
追加,上述 python3 の実行結果は,当然ながら,コンソールで逐一入力したものではない(そりゃそうでしょ)
しかし,一行ずつのスクリプトを入力するのではなく,以下のように,全行まとめてやるとずっと速いということがわかった
>>> s=time.time();np.mean(np.arange(1,10000001));print(time.time()-s)
5000000.5
0.03643488883972168
パーサー(?)に一括して渡すかどうかの違いかな?
※コメント投稿者のブログIDはブログ作成者のみに通知されます