GIS奮闘記

元GISエンジニアの技術紹介ブログ。主にPythonを使用。

スポンサーリンク

PyPyを試してみる

今回はPyPyについてです。Pythonのいいところは手軽さだったり、ライブラリの豊富さだったりあげたらきりがありません。しかし、Pythonには遅いという欠点があります。ここはスクリプトということで致し方ないところはありますが、GISでも大量のデータを扱うことが多いため、どうしても高速化が必要になります(←ブログタイトルに無理矢理こじつけ)。そこでPyPyですよ!

PyPyとは
「PyPy(パイパイ)は、プログラミング言語Pythonの実装の1つであり、Pythonで記述されたPythonの処理系であることが特徴の1つである(セルフホスティング)。PyPyは、実行速度と効率、およびオリジナルのPython実装であるCPythonとの互換性に重点を置いている。」
PyPy - Wikipedia
簡単にいうとPythonを高速で実行できるということですね。やったー!ただ、日本ではこの名前によって受け入れられない気が?!

公式サイトからダウンロードして配置すれば使用できます。
http://pypy.org/

とりあえずサンプルとしてフィボナッチ数列を出力するプログラムを作ってみました。
フィボナッチ数列とは
フィボナッチ数列(フィボナッチスウレツ)とは - コトバンク
不思議ですねー。

#coding:utf-8
import time

def fib2(n):
    if n <= 2:
        return 1
    else:
        return fib2(n-1) + fib2(n-2)

if __name__ == "__main__":
    start = time.time()
    for i in xrange(1,30):
        print fib2(i)
    elapsed_time = time.time() - start
    print("elapsed_time:{0}".format(elapsed_time))

■通常のPythonで実行
1
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
6765
10946
17711
28657
46368
75025
121393
196418
317811
514229
elapsed_time:0.601999998093

■PyPyで実行
1
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
6765
10946
17711
28657
46368
75025
121393
196418
317811
514229
elapsed_time:0.169999837875

なんと3~4倍速くなりました。公式的にはもう少し早くなるみたいですね。
今回はPyPyについてでした!