python

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]]

Python 3に再入門中 - Dive Into Python 3 と Check iO

Pythonを本格的に習得しようと勉強を始めた。まずはPython 3のチュートリアルである 目次 - Dive Into Python 3 日本語版 を12章まで読み終わった。このチュートリアルは明快で面白く読み進められるのでかなり良かった。練習したことを忘れにくくするためにm…

Pythonでの式(Expression)と文(Statement)

Python2ではprintは文(Statement)であったが、Python3ではprintは式(Expression)になった、という記述をよく見る。しかしその違いがよく分からなかったので調べてみた。嘘を言っているかもしれない… 式(Expression) 式とは、評価されることによって、何らか…

Python 3ではまったこと

Python 2.xの知識もたいしてないのにもかかわらずPython 3.xのコードを書いていると、細かい違いでハマることが想像以上に多い。ここではそんなハマりどころをまとめておく。 printが文から式になった Python 2.xでは print "aaa"と書けたのに、Python 3.xで…

標準入力から文字を読み込む

プログラミングコンテストでPythonを使うとき用に、標準入力から文字や数字を読み込む方法をまとめる。 一行分を文字列として受け取る 標準入力が以下として aa bb cc dd ee以下のPythonコードで受けると、 #!/usr/bin/env python # -*- coding: utf-8 -*- s…

Pythonで、文字列の一部の文字を変更する

Pythonの文字列は、作成後に変更することができない。 例えば、ある文字列strの3文字目を'z'に書き換えるつもりで以下のようなコードを書くと #!/bin/env python # -*- coding: utf-8 -*- str = "abcdefghi" str[2] = 'z' 以下のようなエラーが出て実行がで…