雲雀は高く空を舞い このページをアンテナに追加 RSSフィード

「ひよこは高く空を舞い」について

2009-12-03

[]コーディング規約 コーディング規約 - 雲雀は高く空を舞い を含むブックマーク はてなブックマーク - コーディング規約 - 雲雀は高く空を舞い コーディング規約 - 雲雀は高く空を舞い のブックマークコメント

ここら辺。pepはPython Enhancement Proposalとか。

[]パッケージに関する覚え書き パッケージに関する覚え書き - 雲雀は高く空を舞い を含むブックマーク はてなブックマーク - パッケージに関する覚え書き - 雲雀は高く空を舞い パッケージに関する覚え書き - 雲雀は高く空を舞い のブックマークコメント

パッケージについて

__init__.pyの入ったディレクトリをパッケージとしてimportできる。Mac OS Xのバンドルみたいな感じ。

また、ディレクトリは多層構造にできるけど、その際各ディレクトリに__init__.pyが必要。

__init__.pyはパッケージインポートの祭の初期化メソッドなどを記すが、空でもかまわない。


パッケージのインポート

Sound/
    __init__.py
    Format/
        __init__.py
        echo.py
        sorround.py
     Filters/
        __init__.py
        equalizer.py
        vocoder.py

このようなパッケージがあった場合、echo.pyをインポートするにはimport Sound.Format.echofrom Sound.Format import echoなどとする.

echo.py内の関数echofileterを使用する場合、import Sound.Format.echoとした場合はSound.Format.echo.echofilter(input, output)とする。

from Sound.Format impor echoとした場合はecho.echofilter(input, output)とできる。

またfrom Sound.Format.echo import echofileterと、直接関数をインポートすることもでき、この場合はechofilter(input, output)と使える.

from package import itemとした場合、itemはサブパッケージ、サブモジュール、モジュール内で定義されている関数、クラス、変数などを指定できる。

import package.itemとした場合、itemに指定できるのは、モジュールかパッケージのみ。

パッケージ内での暗黙のあるいは明示的な相対import

1) 暗黙の相対パスimport

パッケージ内でのimport itemの実行はまずパッケージ内で探索されその後標準検索パスを見る。

import されたモジュールが現在のパッケージ (現在のモジュールをサブモジュールにしているパッケージ) 内に見つからなかった場合、 import 文は指定した名前のトップレベルのモジュールを検索する。

モジュール Sound.Filters.vocoder で Sound.Effects パッケージの echo モジュールをimportしたいときは、 from Sound.Effects import echoとする。

2) 明示的な相対パスimport

モジュール Sound.Filters.vocoderから他のパッケージやモジュールをimportする際はfrom .. import Effects, from ..Effects import echo, from . import equalizerなどとする.

3) もちろん絶対パスimport も行えるので可読性などのためには絶対パスimportが良いのでは

トラックバック - http://chick.g.hatena.ne.jp/allegro/20091203

2009-11-30

[]文字列をaとbとcとdで分割したい 文字列をaとbとcとdで分割したい - 雲雀は高く空を舞い を含むブックマーク はてなブックマーク - 文字列をaとbとcとdで分割したい - 雲雀は高く空を舞い 文字列をaとbとcとdで分割したい - 雲雀は高く空を舞い のブックマークコメント

文字列をseparatorで分割するときはStrings.split()メソッドを使う。

text = u'おはようございます。それでは行ってまいります。横浜は雲が出ているものの、晴れ間がのぞいています。'
seped = text.split('')
print seped
[u'おはようございます',
u'それでは行ってまいります',
u'横浜は雲が出ているものの、晴れ間がのぞいています'

文字列を複数の位置で分割したいときは?

  1. splitをループで使う
  2. 正規表現のre.split()メソッドを使う
text = u'おはようございます。それでは行ってまいります。横浜は雲が出ているものの、晴れ間がのぞいています。'
seped = re.split(u'。|、', text)
print seped
[u'おはようございます',
u'それでは行ってまいります',
u'横浜は雲が出ているものの'
u'晴れ間がのぞいています'

区切り文字を出力に含みたいときはpatternをグループ化すればおk

seped = re.split(u'(。|、)', text)
トラックバック - http://chick.g.hatena.ne.jp/allegro/20091130

2009-11-17

[][]Numpy速い! Numpy速い! - 雲雀は高く空を舞い を含むブックマーク はてなブックマーク - Numpy速い! - 雲雀は高く空を舞い Numpy速い! - 雲雀は高く空を舞い のブックマークコメント

Pythonの行列・配列ライブラリNumpyは、高速に行列演算が可能とのことだったので,果たしてどのくらい高速なのかしらと言うことで、2個の100次元ベクトル間の距離を計算してみた。距離の計算方法は次の二つ(に無名関数バージョンを追加)

計算環境はPython 2.6 (64bit, on MacOSX 10.6, MacBookPro, 2.53GB C2D, 4GB mem)

def getdistsA(unitA, unitB):
        #dim = len(unitA)
        dist = sqrt(sum([(unitA[x] - unitB[x])  for x in arange(dim)]))
        return dist[0]

def getdistsB(unitA, unitB):
        return sqrt(dot((unitA-unitB)**2, E))
getdistsC = lambda A,B:sqrt(dot((A-B)**2, E))

これを10k回計算してかかった時間を比較した。

tt0 = datetime.datetime.now()
for i in arange(1000*10):
    A = random.random((dim,1))*10
    B = random.random((dim,1))*10
    d= getdistsA(A,B)

tt1 = datetime.datetime.now()
t0 = tt1 - tt0

したところ、リスト内包形式で計算した場合は、10.69秒。行列演算した場合は関数形式で0.343秒、無名関数で0.347秒でした。(ちなみに、距離計算無しでAとBを10k回定義したところ0.231秒でした。

という感じで、NumPyを使った場合計算次第で、使わない場合の3%位の計算時間で実行が可能でした。早い。

ちなみに、matlabで同じ事をした場合0.536秒だったのでもしかしたらPythonが遅いだけかもしれません。


dim = 100
E = ones(dim,1);
funct= @(A,B) ((A-B).^2)*E
tic 
for i = 1:1000*10
   A = rand(1,dim);
   B=rand(1,dim);
   C=funct(A,B);
end
toc
トラックバック - http://chick.g.hatena.ne.jp/allegro/20091117

2009-11-16

[][]バックグラウンドで関数を実行する バックグラウンドで関数を実行する - 雲雀は高く空を舞い を含むブックマーク はてなブックマーク - バックグラウンドで関数を実行する - 雲雀は高く空を舞い バックグラウンドで関数を実行する - 雲雀は高く空を舞い のブックマークコメント

バックグランドで関数を実行するには%bg python_statementを使う

バックグランドで実行しているものを確認するにはjobs.jobs_runかな?

ちなみにiPython上でのスクリプトの実行は%run -i foo.pyバックグランドでスクリプトを実行するには%bg _ip.magic('run -i foo.py')

[][]モジュールのリロードとディープリロード モジュールのリロードとディープリロード - 雲雀は高く空を舞い を含むブックマーク はてなブックマーク - モジュールのリロードとディープリロード - 雲雀は高く空を舞い モジュールのリロードとディープリロード - 雲雀は高く空を舞い のブックマークコメント

モジュールを再読込する場合はreload。モジュールないでimportされてるモジュールまで含めてリロードする場合はdreload

[][] 2009-11-16 - 雲雀は高く空を舞い を含むブックマーク 2009-11-16 - 雲雀は高く空を舞い のブックマークコメント

NumPyに関する適当にリンクをまとめる

SciPyについては何ができるのかあんまり把握してない…

トラックバック - http://chick.g.hatena.ne.jp/allegro/20091116

2009-11-15

[][]numpy for matlab users numpy for matlab users - 雲雀は高く空を舞い を含むブックマーク はてなブックマーク - numpy for matlab users - 雲雀は高く空を舞い numpy for matlab users - 雲雀は高く空を舞い のブックマークコメント

この二つがすごい参考になる。

以下この二つからの適当な写し。

matlabnumpy
a(:,1)a[:,1]
[a; b]vstack( (a, b))
size(a)a.shape
トラックバック - http://chick.g.hatena.ne.jp/allegro/20091115
テクノラティプロフィール