読者です 読者をやめる 読者になる 読者になる

windows 10 + cuda + chainer で corecrt.h が見つからない問題

Windowsに正式対応していないchainerをwindowsで動かす際のエラーについてメモします。 環境 Windows 10 64bit cuda 8.0 (cudnnは未導入) Python 3.5.1 64bit (Anaconda Pythonを利用) chainer 1.20.0.1 Visual Studio Community 2015 現象 GPUを利用するcha…

pythonのsplit関数を使って空白文字で分割するときの注意点

pythonのsplit関数を使うと、文字列をある文字で分割することができます。 例えば、カンマで文字列を分割するには以下のようにします。 s = "a,b,c" print(s.split(',')) # ['a', 'b', 'c'] s.split()とs.split(' ')は同じ出力となると勘違いしていましたが…

Python 3で絵文字を羅列する

Python3を使って、Unicodeに登録された絵文字を羅列して遊んでみました。この記事ではPython 3でのみ動作確認をしています。 コードポイントから文字への変換 Pythonの組み込み関数であるchr()を使うと、Unicodeのコードポイント(日本語では符号点)から文…

Pythonの例外処理に関するまとめ

適当に書いてしまいがちな例外処理について自分なりにまとめました。 Pythonにおける例外 Pythonでは「認可をとるより許しを請う方が容易 (easier to ask for forgiveness than permission)」、略してEAFPというコーディングスタイルが推奨されています。EAF…

Pythonのvars()とdir()の違い

よくどっちがどっちだったか混乱してしまうので自分用にまとめます。最初に、引数にオブジェクトを渡して呼び出したときの挙動を比較したのち、引数なしで呼び出したときの挙動を比較します。 vars(obj) 2. 組み込み関数 — Python 3.5.2 ドキュメントによる…

PyCharmでエディタの文字サイズをCtrl + マウスホイールで変更可能にする

表題のようにする方法が PyCharm 2016.1 Help :: Zooming in the Editor にあります。 File -> Settings...と辿ってウィンドウを開いた後、左側のペインでEditor -> Generalと辿り、"Change font size (Zoom) with Ctrl+MouseWheel"にチェックを付ければOKで…

pythonでwithによるネストを防ぐ

Pythonではファイルを開くときなどにwithを使うのが定石である(参考:ファイル - Dive Into Python 3 日本語版)。しかし、複数のファイルを開くときには以下のようにネストが発生してしまうのが気に入らなかった。 with open('a.txt', 'w') as f1: with op…

PyInstallerでPythonスクリプトをexe化

PythonスクリプトをWindowsのexeにする方法 (調査中) - minus9d's diary にて、Python 3.5のスクリプトをWindowsのexe化するにはPyInstallerが良さそうだという記事を書きました。この記事ではPyInstallerを使ってexe化する方法について調査した結果を記しま…

PythonスクリプトをWindowsのexeにする方法 (調査中)

表題の方法について調べてみました。Python 3.5で動かすことが目標なのですが、ハマっていてまだ動いていません。以下、調査した内容のメモです。 py2exeを使う方法 py2exeは、Python 2系とPython 3系とで配布場所が異なります。 Python 2系の場合、py2exe d…

Python3では変数名に日本語が使える

Fluent Python - O'Reilly Mediaを読んでてびっくりしたのでメモ。Python 3では変数名にアスキー文字以外も使えます。例えば # -*- coding: utf-8 -*- def 階乗(整数): if 整数 <= 0: return 1 else: return 整数 * 階乗(整数-1) print(階乗(5)) は問題なく…

matplotlibで軸の値が小数になったりオフセット表現になったりするのを止める方法

問題 pythonのmatplotlibで、年ごとの値の変化を表す折れ線グラフを書こうとして以下のコードを書きました。 import numpy as np import matplotlib.pyplot as plt x = np.array([2006, 2007, 2008]) y = np.array([35.2, 27.4, 41.2]) plt.plot(x, y) plt.s…

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

前にmatplotlibをオブジェクト指向スタイルで使う - minus9d's diaryという記事を書きました。しかし、matplotlib によるデータ可視化の方法 (1) - Qiita および Why do many examples use "fig, ax = plt.subplots()" in Matplotlib/pyplot/python - Stack …

Anacondaのcondaコマンドによる仮想環境の使い方のまとめ

Pythonパッケージ集として人気のあるAnacondaに付属するcondaコマンドを使って、クリーンなPython環境を作ったり破棄したりする方法についてまとめました。 環境を作る myenvという名前のpython環境を作ってみましょう。 $ conda create --name myenv python…

Pythonの関数のデフォルト値にリストなどを使うときは要注意

Pythonの関数には、他の多くの言語と同じく、引数のデフォルト値を指定する機能があります。 例えば以下の関数に引数を一つのみ与えたときは、bには3の値が入ります。 def func1(a, b = 3): return a + b このデフォルト値に、リスト、辞書などの可変オブジ…

Pythonでインスタンスの状態をダンプするにはvars()を使う

以下のような、インスタンス変数としてval1とval2を持つMyClassというクラスを考えます。 class MyClass: def __init__(self, val1, val2): self.val1 = val1 self.val2 = val2 以下のように、このクラスのインスタンスを作り、printしてみます。 mc = MyCla…

shift_jisでUnicodeDecodeErrorが出る場合は、shift_jisx0213でデコードしてみる

あるウェブページを、Python 3で以下のように読み込もうとしました。 import bs4 import urllib.request def get_soup(url): rawtext = urllib.request.urlopen(url).read() soup = bs4.BeautifulSoup(rawtext.decode('shift_jis')) get_soup('http://xxxxx'…

Pythonで、文字列に日本語が含まれているか判定する

表題のことをPythonで行おうとあれこれ検索しましたが、なかなかこれだという方法が見つかっていません。 今のところ、Is there a way to know whether a Unicode string contains any Chinese/Japanese character in Python? - Stack Overflowで紹介されて…

Python3で、urllibとBeautifulSoupを使ってWebページを読み込む

Python3で、urllibとBeautifulSoupを使ってWebページを読み込む方法についてまとめます。 urllibを使ったページの取得 まず、Python3の標準ライブラリであるurllibを使ってページを取得します。Python2から書き方が変わっているので注意が必要です。 import …

Anacondaの本体とパッケージ一式のアップデート方法

本体のアップデート コンソールから conda update conda と打つ。 パッケージ一式のアップデート コンソールから conda update --all と打つ。アップデートされるパッケージの一覧が表示されるので、問題なければyと打ちReturn。 Pythonのバージョンのアップ…

SymPyで数式と戯れる

数式を扱うPythonのライブラリであるSymPyを触っています。できることが多くてなかなか面白いです。以下、導入メモです。 ブラウザでとりあえず試す SymPy Liveで試せます。適当に >>> x ** 2 - 3 * y ** 2 などと打つと、LaTeXのきれいな数式で表示されて驚…

Pythonのライブラリのソースコードの場所を調べる

Python Library Source Code: how can I view it? - Stack Overflowに方法が載っていました。いろいろ方法はあるようですが、もっとも簡単なのは import random print(random) でしょうか。

scikit-learnのSVMを使って多クラス分類を試す

Pythonのscikit-learnを勉強中です。今回は、公式ページにある、手書き文字を0から9に分類するコード (Recognizing hand-written digits — scikit-learn 0.16.1 documentation) を読み解いてみます。 準備 Python 3でscikit-learnを使えるようにします。今回…

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()を使うと、シーケンスのうち条件にあう要…