python

Pythonパッケージ集の比較

Pythonの科学技術計算でよく使うライブラリを一挙にインストールできるパッケージ集を比較しました。 比較対象 Download Anaconda Python Distribution Python Distribution and Integrated Analysis Environment | Enthought Canopy pythonxy - Scientific-…

Python 3でfunctools.lru_cacheを使って簡単にメモ化再帰

Google Code Jamの公式解説 Dashboard - Round 1B 2014 - Google Code Jamを読んでいて、Python 3には簡単にメモ化再帰する機能が標準ライブラリに含まれていることを知りました。以下、簡単な解説です。 フィボナッチ数を求める再帰関数 お題として、n番目…

PyQt5で、Yahoo! 形態素解析の結果を表示するアプリを作成

PyQt5の練習の続き。もう少し実用的な例として、Yahoo! 形態素解析の結果をWebを通じて取得し、テーブルに表示するアプリを作成しました。 実験環境 Win7 Pro + Python 3.4.3 + PyQt5 アプリのスクリーンショット 最上部には、ご利用ガイド - Yahoo!デベロッ…

PyQtで100個のスライダーを並べる

PythonのGUIツールキット PythonでGUIアプリを作るためのライブラリを調べました。QtのPythonバインディングとしてはPyQtとPySideが有名なようです。特徴を比較すると以下のようになります。 ツールキット 開発元 ライセンス 備考 PyQt4 Riverbank Computing…

Pythonで (-N//2) と (0-N//2) は同じにならない

Be careful: (-N//2) and (0-N//2) を見ていて混乱した話です。 問題のコードを実行 まず、上記リンクで話題になっているコードを動かしてみます。 N = 99 print(-N//2) print(0-N//2) をPython 2またはPython 3で実行すると、以下の結果が出力されます。 -5…

Pythonで2変数関数に対してニュートン法を用いる

前回、Pythonで2変数関数に対して最急勾配法を用いる - minus9d's diaryにて、2変数関数に対する最急勾配法を Pythonで実装しました。 今回は、最急勾配法よりも収束が早いと言われるニュートン法を実装してみます。私の理解が正しければ、ニュートン法では…

Pythonで2変数関数に対して最急勾配法を用いる

以前、Pythonで最急勾配法を実装し、グラフを描く - minus9d's diary という記事にて、1変数関数に対して最急勾配法を用いて極値を求める実装を紹介しました。 今回の記事では、2変数関数に対して同じことをやってみます。目的関数はです。紙と鉛筆で極値を…

matplotlibをオブジェクト指向スタイルで使う その1

Matlabスタイルとオブジェクト指向スタイル matplotlibは、以下のようにmatplotlib.pyplotに属する関数を順番に呼んで使われることが多いです。 import matplotlib.pyplot as plt plt.plot([1,2,3,4]) plt.ylabel('some numbers') plt.show() これはMatlabで…

Pythonのループはelseを持てる

Pythonのforループやwhileループは、elseを持つことができると聞いて驚きました。例えば以下のコードは合法です。 for i in range(5): print("i = ", i) else: print("loopは無事に終了しました") 実行例は以下です。 i = 0 i = 1 i = 2 i = 3 i = 4 loopは…

Pythonのsort(), sorted(), reverse(), reversed()の使い方

いまだに混乱してしまうのでメモ。Python3でテストしていますがPython2でも同じはずです。 sort() list.sort()という形で使います。元のリスト自体の中身が変わります。Rubyでいう「破壊的メソッド」にあたります。 nums = [2, 4, 1, 6] nums.sort() # 破壊…

os.path.joinでリストを連結する

Pythonのos.path.joinを使うと、実行環境に応じた適切なセパレータによってパスを連結できます。 import os os.path.join("path", "to", "somewhere") # 'path/to/somewhere'が返る(linuxの場合) join()の引数にリストを与えるのはよくある間違いです。以下…

Python3でmkdir -pする(深いディレクトリを作る)

bashなどでmkdirに-pを付けると、深い階層のディレクトリを一発で作れます。 mkdir -p very/deep/dir これと同じことをPython3(3.2以上)で行うには、os.makedirs()を使います。 import os os.makedirs(os.path.join("very", "deep", "dir"), exist_ok=True) …

Pythonの辞書で順番を保つにはOrderedDictを使う

Pythonの辞書(dict)では、keyを登録した順番は記憶されません。 例えば以下のコードを実行すると、 # 普通のdictの場合 d = {} d["zz"] = 0 d["cc"] = 30 d["aa"] = 10 d["bb"] = 20 d["aa"] = 40 for key, val in d.items(): print(key, val) 以下の結果が…

Python Toolsで対話的にデバッグする

Visual StudioにPython Toolsプラグインをインストールした構成にて、コードの実行中に対話的にデバッグを行う方法についてご紹介します。Windows 7 + Visual Studio Express 2013 for Windows Desktop Update 4 + Python Tools 2.1という構成で動作を確認し…

matplotlibの使い方メモ

自分用メモ。ブログ用に編集し直すのが面倒なので、IPython Notebookのノートへのリンクを置きます。 nbviewer.ipython.org/gist/minus9d/e7fea3fc9301762ce9e0

IPython Notebookのノートをgitなどで版管理する

IPython Notebookのノートは、拡張子が.ipynbであるファイルとして保存されます。この.ipynbファイルを覗いてみると、以下のようにpngがファイル内に埋め込まれていることがわかります。 "outputs": [ { "metadata": {}, "output_type": "display_data", "pn…

"random.py", "test.py"などのファイル名を付けるとハマる

Pythonのrandom.choiceを試してみようと、以下のようなrandom.pyを作成し、実行しました。 #!/usr/bin/env python3 # -*- coding: utf-8 -*- import random print(random.choice(["a", "b", "c"])) しかし、以下のようなエラーが出て実行できませんでした。 …

Python版OpenCVにて補完機能を使う (VS2013 Python Tools)

以前に Visual Studio Express 2013をPythonのIDEとして使う - minus9d's diary という記事を書きました。これの延長として、VS2013にてOpenCVのPythonバインディングを使用するときに、補完機能を有効にする方法について書きます。 「ソリューションエクス…

MacportsでPython2.7.5をPython2.7.8に更新しようとして失敗

Macに入っているPython2.7を、2.7.5から2.7.8へと更新しようと以下のコマンド $ sudo port upgrade python27 を打つと、以下のエラー Warning: The Xcode Command Line Tools don't appear to be installed; most ports will likely fail to build. Warning:…

Visual Studio Express 2013をPythonのIDEとして使う (Python Tools)

Microsoftから公式リリースされているPython Tools for Visual Studio - Homeを使うと、Visual Studio 2013をPythonのIDEとして使うことが可能となります。どうせ有償であるProfessional版だけでしょ?と思いきや、2.1バージョンからはなんと無償であるExpre…

Pythonの標準ライブラリargparseで引数をパースする

Python 2.7から標準ライブラリに加わったargparseを使うと、簡単に引数のパーサが書けます。詳細はargparseを使ってみた - そこはかとなく書くよ。を見ていただくとして、ここでは基本機能だけ書きます。 目標 以下のようなargparse_test.pyを作ることを目標…

Python 3で、iTunesのXMLをパースする その2

Python 3で、iTunesのXMLをパースする その1 - minus9d's diary の続きです。 XPathを使ってXMLを探索 XMLから所望のデータを取り出すには、XPathと呼ばれる、XMLのツリーのうち特定の条件にあった部分を取り出すための言語を使うのがよいでしょう。 今回のX…

Python 3で、iTunesのXMLをパースする その1

AppleのiTunesで曲を管理していると、"iTunes Music Library.xml"というXMLファイルが自動生成されます。このファイルを分析することで、「もっとも曲数が多いアーティスト」「リリース年別の曲数の遷移」などさまざまな情報を抽出できます。 今回はPython 3…

numpyのndarrayを使った行列操作練習帳 その2

前回の続きです。 行列の情報を取得 行列のサイズを取得するには.shapeを使います。 >>> a = numpy.arange(35).reshape(5,7) + 10 >>> a array([[10, 11, 12, 13, 14, 15, 16], [17, 18, 19, 20, 21, 22, 23], [24, 25, 26, 27, 28, 29, 30], [31, 32, 33, 3…

numpyのndarrayを使った行列操作練習帳 その1

pythonのnumpyパッケージで操作の中心となるのはndarrayクラスです。ndarrayクラスは1次元配列にも2次元配列にもそれ以上の次元の配列にもなりますが、ここでは2次元配列、つまり行列として利用する場合に焦点を絞って、操作法を練習します。 行列の作成 行…

Python 3.4の導入メモ - pipとpyvenv

Python 3.4をWindows 7にインストールしました。パッケージ管理周りの情報が錯綜してややこしいので、自分で調べたことをメモしておきます。 Installation & Packaging Tutorial — Python Packaging User Guide documentation を大いに参考にしています。 nu…

Pythonでimportしたモジュールの場所を調べる

例えばimport numpyで読み込んだnumpyモジュールのソースコードの場所を知りたいときは、 import numpy print(numpy.__file__) とします。表示例は以下のとおりです。 '/usr/lib/python3.2/site-packages/numpy/__init__.py' またinspectモジュールのgetfile…

Python 3で高階関数やラムダ式の練習

高階関数 Pythonでは、関数の引数として関数をとることができます。関数を引数としてとったり、関数を戻り値として戻したりできる関数のことを高階関数と呼びます。 filter() 高階関数の代表はfilter()です。filter()を使うと、シーケンスのうち条件にあう要…

Python 3で小数点以下n桁を表示する

C/C++でいうprintf("%.20f", val)のように、小数点以下n桁を表示するには以下のように書く。これは小数点以下20桁を表示する例。 val = 1 / 3 print("{0:.20f}".format(val)) 結果は以下の通り。 0.33333333333333331483 この書き方苦手だ…

Python 3でm x nの2次元配列を定義する

たとえば3x5の2次元配列(要素はすべて0)を定義するには以下のように書く。 >>> matrix = [[0 for i in range(5)] for j in range(3)] printすると以下のようになる。 >>> print(matrix) [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]