Python コードの見直し⑴
少しずつやらなくてはと思っていた、今まで書き溜めてきたpythonスクリプトの見直し。
元々プログラミングについては研究室時代から独学で勉強してきて、
(研究室時代)MATLAB -> (留学時代)IDL -> (帰国)MATLAB -> (会社)Python, shとか、という流れで触ってきました。
今は新しくアルゴリズムを組むときはひたすらにPythonを使っています。
勉強し始めた時から作り続けてきたモジュール。
知識が付いてくると、自分の作ってきたコードを見返した時に、
「昔の自分はなんて無駄なことをしていたんだ」と思うことって誰しもあると思うのです。
見直して書き直さなければ。いつかちゃんとやらないとなぁと思いながら、手をつけられずにずるずると時間だけが経ってしまっています。
今日ついに重い腰をあげて少しずつでもと思って着手。
基本的にやったことは、自分で作っていたものを既存の関数に置き換えただけです。知ってる人にとってはなんてことない、もしくはもっと楽にできるよ、ってなもんかもしれません。私のようなpythonビギナーにとって少しでも参考になればと、ブログに残しておきます。
2次元以上のNumpy配列を1次元にreshape
今までのコード。reshapeするには要素数が必要だわい、ということで要素数を取得してreshapeしてました。
pix_num = A.size A = np.reshape(A, (pix_num,))
書き換えたコード。flattenなんて知らなかったんです。これで一撃。
A = A.flatten()
配列からランダムにいくつかの要素を取り出す
今までのコード。そもそもこのコードだと重複して取り出してしまう可能性があります。それでも以降の処理に関係なかったのでこれで妥協していたんですね。
choice_id = np.random.randint(0, high=len(A)-1, size=100) A[choice_id]
書き換えたコード。choice関数を使ってスッキリ。ただし一次元の配列しか対応していないようなのでそこだけが留意点。
np.random.choice(A.flatten(), size=100)
関数の引数にデフォルト値を設定
今までのコード。なんて愚かだったのか。
def figs(A, crange): if crange == 0: hogehoge if crange == 1: hugahuga
だいたいcrange=0とする時が多かったので次のようにデフォルト値設定。
def figs(A, crange=0): #以下コードに変更なし。
入力する時楽になるだけだけど、頻繁に使うものだったのでだいぶ助かる。
デフォルト値設定については、作りためたいろんなコードに適用可能なので徐々にやっていこう。
とりあえず今日のところはこんなところで。他にもいろんな改善が可能と思ってるので期待を込めてタイトルに(1)を付けました。