2008-10-01から1ヶ月間の記事一覧

Cython + ctypes = 最強コンボ?

Cythonのファイル.pyx内では、Pythonの関数をdefで、Cの関数をcdefで定義する。Cythonで作成したものをPythonから呼びだすには、Cythonで作成した.pydファイル(Cythonから自動生成された.cファイルをPythonのDLL化したもの)をimportして使用する。test.pydな…

multiprocessingの時間計測

Intel Core2 Duo CPUマシンでmultiprocessingモジュールを使用した場合としない場合の実行時間を比較した。Pythonは3.0を使用。2.6でもOK。 from multiprocessing import Process import time def fib_n_times(cnt): for i in range(1, cnt+1): print('%d =>…

プログラミング言語Cyan

takuto_hの日記: Cyan, Yet Another New language (http://d.hatena.ne.jp/takuto_h/20081022/1224665176) プログラミング言語Cyan (http://www.geocities.jp/takt0_h/cyan/index.html) Cyan(さいあん)は私の中でLisp + Pythonというイメージで機能的には面…

Cythonのパフォーマンス

2chの「pythonがこの先生きのこるには」というスレでfibでCythonがかなり遅い結果になっていたので調べてみた。 Pythonは、2.5.2、Cythonは、0.9.8.1.1を使用。 以下は、psycoを使用した通常のPython。 1.157秒。psycoを外すと 19.844秒。 # pyfib.py def fi…

メモ

C/C++とPythonの連携 pythonとc++のインターフェイスの比較 swig boost.python ctypes http://d.hatena.ne.jp/niitsuma/20080209/1203184397 C or C++でPythonを拡張する方法 (または C or C++ でPython Extension modulesを書く) http://spamalot.dip.jp/lu…

メモ

渋日記: 「[翻訳]Pythonを使って2MBのメモリで100万の数値をソートする」 (http://sky.ap.teacup.com/shibu/69.html) やはりバイナリはstructモジュールでなくarrayモジュールなのか。3.0でもstructモジュールはなくなってない。あとはバッファリングを自前…

tkinter

Python 3.0でTkinterモジュールが標準ライブラリからドロップしたと思ったら、tkinterモジュールに名前が変更されているだけだった。Pyhon以外何もインストールしなくても使えるのでやはりwxPythonよりも手軽。 しかし、Tkinter調べていたらドラッグ&ドロッ…

UMPC

小さくて安いノートパソコンがあると聞いていたがUMPC(ウルトラモバイルPC)というのか。エイサー社のAspireone AOA150-Bwが価格comで46,200円だったけど、3万円切るくらいになったら携帯電話感覚でセカンドPCとして買おうかな。しかし解像度が1024×600しかな…

Python 3.0のrangeの注意点

Python 3.0をテストしていて驚いたのが以下の例。 >>> from timeit import * >>> t1 = Timer('L[5000]', 'L=range(10000)') >>> t2 = Timer('L[5000]', 'L=list(range(10000))') >>> t1.timeit() 0.61441663675145719 >>> t2.timeit() 0.1539030798605836 3.…

compact_number_listのパフォーマンス

とりあえずテスト結果の傾向のみメモ。 昨日のcompact_number_listをインデクシングを使ったリスト版とイテレータ版の時間を比較していたが、短いリストだとインデクシングの方が速いが、長いリストになるとイテレータの方が速い。compact_number_listではch…

再帰の考え方

まず例を見てみよう。 for i in range(10): print i 上記の例では、iの状態を0から9まで変えながらループしている。ここで、1つのループをフレームと呼ぶことにする。次に再帰のコード例を見てみる。 def fib(n): if n==0 or n==1: return 1 else: return fi…

リストの先読み

リストを先読みするには以下のようにイテレータを複製して、ポインタを必要な分だけ進めておく。そして並列に回す。 >>> from itertools import * >>> xs = range(7) >>> xs1 = chain(xs, [None, None]) >>> xs1, xs2, xs3 = tee(xs1, 3) >>> xs2.next() 0 >…

メモ

Develogger: codecsで使えるエンコーディング (http://www.r-stone.net/blogs/satoshi/2008/02/codecs.html) Pythonのcodecsで使用できるエンコーディングは「encodings」モジュールにあるようです。 ... WindowsXPでは「C:\Python25\Lib\encodings」になり…

メモ

compact-number-list (3) (http://d.hatena.ne.jp/morchin/20081006#p1) ファイル処理などのイテレータで先読みする場合にteeを使うとうまくいきそうなので、そのアイデアでcompact-number-listの拡張版の問題を時間あるときにパフォーマンスも含めて研究し…

Consリスト

Lisp プログラマのための Python 入門 (http://www.unixuser.org/~euske/doc/python/python-lisp-j.html) を読み直していて、PythonでLispのような連結リストを表現するのは (1, (2.0, ("three", None))) とあったので、これを基にして自分の「car, cdr, con…

Pythonクイズの回答(特異メソッド)

mopemopeのおらっちゃ富山県民やちゃあ: Pythonクイズ (http://d.hatena.ne.jp/mopemope/20081017/p1) Python 2.5.2 (r252:60911, Feb 21 2008, 13:11:45) [MSC v.1310 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more…

Pythonクイズの回答

Pythonクイズ: mopemopeのおらっちゃ富山県民やちゃあ (http://d.hatena.ne.jp/mopemope/20081016/p1) Python 2.5.2 (r252:60911, Feb 21 2008, 13:11:45) [MSC v.1310 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more…

3.0のメモ

C:\Python30\Lib\test\test_itertools.pyからのメモ >>> from itertools import * >>> >>> seq = range(4) >>> a, b = tee(seq) >>> next(b) 0 >>> list(zip(a, cycle(b))) [(0, 1), (1, 2), (2, 3), (3, 1)] >>> >>> seq = [1, 2, 3] >>> pairs = [(2**i, x…

Pythonクイズ(辞書の非破壊的操作)の解答

以下のようにdictコンストラクタが辞書自身とキーワード引数の両方をとれることを利用。 >>> d1 = {'a':1, 'b':2, 'c':3} >>> d2 = {'c':4, 'd':5, 'e':6} >>> print dict(d1, **d2) {'a': 1, 'c': 4, 'b': 2, 'e': 6, 'd': 5} >>> d1 {'a': 1, 'c': 3, 'b':…

メモ

ときどきの雑記帖 i戦士篇 Python遣いのためのScala入門 その1 (Scala for Pythonistas: Part 1) (http://www.kt.rim.or.jp/~kbk/zakkicho/08/zakkicho0809c.html#D20080929-6) Scala for Pythonistas: Part 2 (http://finitestate42i.blogspot.com/2008_09_…

Pythonクイズ(辞書の非破壊的操作)

以下の?????を埋めよ。但し文字数の指定はない。解答はいくつかあると思うが後日。 >>> d1 = {'a':1, 'b':2, 'c':3} >>> d2 = {'c':4, 'd':5, 'e':6} >>> print ????? {'a': 1, 'c': 4, 'b': 2, 'e': 6, 'd': 5} >>> d1 {'a': 1, 'c': 3, 'b': 2} >>> d2 {'c…

メモ

ancient-vの日記: 重複順列生成 - evalで再帰いらず (http://d.hatena.ne.jp/ancient-v/20081004/1223147239) 「そうかジェネレータ式で必要なだけ for を連ねればいいんじゃん!」 ... ジェネレータ式を文字列で作って eval すりゃいい forループのn次元化(…

2.6関連のメモ

inforno: Python2.6変更点まとめ (http://inforno.net/articles/2008/10/03/python26-features) name-3333's memo: Python2.6 Fractionクラス (http://d.hatena.ne.jp/name-3333/20081004#1223146709) mopemopeのビビット☆パステル☆レインボー日記: python2.…

compact-number-list (3)

stepに対応するようにして、さらにイテレータ(無限リスト)に対応するように拡張してみた。 from itertools import izip def count2(start, step=1): cnt = start while True: yield cnt cnt += step def compact_number_list(seq): seq = iter(seq) curr, ne…

メモ

[Python-ml-jp 4518] Re: 順序を保ったまま重複を取り除きたい (http://www.python.jp/pipermail/python-ml-jp/2008-September/004515.html) ifilterを使用した方法iuniq2を実装した。ifilterを使用した方法iuniq2とmlに載っている方法iuniqの時間を比較して…

PYTHON 3

Guidoのインタビュー on Linux Journal (http://www.python.jp/pipermail/python-ml-jp/2008-October/004518.html)

メモ

>>> def id(*args): ... return args ... >>> zip(range(1,11), range(11,21)) == map(id, range(1,11), range(11,21)) True Haskell Python zip zip(2引数) zipWith map(f, 2引数) map map(f, 1引数) Haskellは、可変長引数の抽象化に弱い?

compact-number-list (2)

6.5.2 Exampla (http://docs.python.org/lib/itertools-example.html) Pythonのマニュアルにめちゃくちゃうまいやり方が載っていた。 >>> data = [ 1, 4,5,6, 10, 15,16,17,18, 22, 25,26,27,28] >>> for k, g in groupby(enumerate(data), lambda (i,x):i-x…