2015年8月31日月曜日

CPython 数値計算ライブラリ(Theano)の追加

Theanoを追加してみる

■環境
 Windows 7 Ultimate Service Pack1 (64bit)
 + Python 2.7.9 (32bit)


■インストール
 これだけで、インストールはあっさり出来てしまう
 >python -m pip install theano

 インストール後、importを試してみると
 >>> import theano
 →エラーが。。。メッセージを見ると、g++が無いと言われている

 そこで、MinGWをインストールし、以下の項目にチェックを入れて追加
 ・mingw32-base (必要かどうか分からなかったのでとりあえず...)
 ・mingw32-gcc-g++

 MinGWインストール先のbin以下に「g++.exe」が存在している事を確認して、この場所を環境変数の「PATH」に追加する

 -----
 ここまでの作業後に再度importで確認
 >>> import theano
 >>>
 →無事、使えるようになったらしい


■簡単に試してみる
 >>> import theano
 >>> import theano.tensor as T
 >>>
 >>> x = T.dscalar('x')
 >>> y = x**2+3
 >>> gy = T.grad(cost=y, wrt=x)  # 微分
 >>>
 >>> f1 = theano.function(inputs=[x], outputs=y)
 >>> f2 = theano.function(inputs=[x], outputs=gy)
 >>>
 >>> print f1(3), f2(3)
 12.0 6.0

 期待通りの計算結果が表示される
 12.0 「x**2+3」のxに3を代入した結果
 6.0 「2*x」(x**2+3の微分)に3を代入した結果

 簡単な記述で、式を解析して微分を解けてしまう事に驚いてしまった!

Python CPythonのインストールとモジュール追加

IronPythonでnumpy、scipy等のライブラリ追加をしようと手を動かしてみたのだけど、どうにも上手く進める事が出来なくて、追加でCPythonをインストールする事に。

■CPython
 インストールは何てことない。msi(インストーラー)があるので、これを実行するだけ
 インストールしたのは、以下のもの
 「python-2.7.9.msi


■モジュールの追加
 ・numpy
  インストーラーが存在しているのですんなり
  「numpy-1.9.2-win32-superpack-python2.7.exe

 ・scipy
  インストーラーが存在しているのですんなり
  「scipy-0.16.0-win32-superpack-python2.7.exe

 -----
 ここまでで、当初の目的は果たしたものの他にも追加をすすめる

 ・matplotlib
  インストーラーが存在しているのですんなり
  「matplotlib-1.4.3.win32-py2.7.exe

 ・dateutil
  pipで見つからないと怒られて、ダウンロードして手動で追加
  「python-dateutil-1.5.tar.gz

 ・wxPython
  インストーラーが存在しているのですんなり
  「wxPython3.0-win32-3.0.2.0-py27.exe

 ・six
  pipでインストール
  「python -m pip install six

 -----
 失敗により保留

 ・pyaudio
  インストーラーが落ちてしまう・・・
  「pyaudio-0.2.8.py27.exe

なんだか、すでに混沌の予感。。

2015年8月28日金曜日

Python Pipのインストール


IronPythonをインストールしたのは良いものの、ライブラリのインストールでかなり戸惑いました。
とりあえず、Pipのインストールが以下の流れできた様子

■環境
 Windows 7 Ultimate Service Pack 1 (64bit)
 + IronPython 2.7.5


■インストール手順

 (1)コマンドプロンプトを管理者権限で実行

 (2)IronPythonのインストール先(ipy.exeが存在する場所)へ移動し、以下を入力
  PROMPT>ipy -X:Frames -m ensurepip
  Ignoring indexes: https://pypi.python.org/simple/
  Downloading/unpacking setuptools
  C:\Program Files (x86)\IronPython 2.7\Lib\weakref.py:1: DeprecationWarning: object.__init__() takes no parameters for type KeyedRef
  """Weak reference support for Python.
  Downloading/unpacking pip
  Installing collected packages: setuptools, pip
  Successfully installed setuptools pip
  Cleaning up...


 書いてしまえばこれだけなんですが、、、
 正直、辿り着くまでに費やした時間が。

2015年8月27日木曜日

Python 少しだけ実用的な所に触れてく(2)

■関数、ファイルサイズ取得

ファイルサイズを表示する関数を書いてみる
 >>> import os
 >>> import glob
 >>>
 >>> # 関数
 >>> def GetFileSize(target_file):
 ...     fsize = os.path.getsize(target_file)
 ...     print target_file, "=", fsize
 ...
 >>>
 >>> # 対象の指定
 >>> target = r'd:\tmp\*.*'
 >>>
 >>> # 対象についてファイルサイズを表示(関数呼び出し)
 >>> for file in glob.glob(target):
 ...     GetFileSize(file)
 ...
 →「ファイル名 = ファイルサイズ」の形で列挙されます

Python 少しだけ実用的な所に触れてく

■ファイルの一覧

 指定したディレクトリのファイル一覧を表示
 >>> import os
 >>>
 >>> # ディレクトリの指定
 >>> path = r'd:\tmp'
 >>>
 >>> # ファイルの列挙
 >>> for file in os.listdir(path):
 ...     print file
 ....
 →これで指定ディレクトリ(d:\tmp)のファイル一覧が得られます


■ファイル書き込み(テキスト)

 単純なテキストファイルの処理
 >>> # 対象のファイル
 >>> target_file = r'd:\tmp\test.txt'
 >>>
 >>> # ファイルオープン
 >>> f = open(target_file, 'w')
 >>>
 >>> # ファイルへ書き込み
 >>> f.write("aaa")
 >>>
 >>> # ファイルクローズ
 >>> f.close()
 >>>
 →aaaが記述された指定ファイル(d:\tmp\test.txt)が作成されます。
  既に存在する場合は上書き


■ファイル読み込み(テキスト)

 単純なテキストファイルの処理
 >>> # 対象のファイル
 >>> target_file = r'd:\tmp\test.txt'
 >>>
 >>> # ファイルオープン
 >>> f = open(target_file, 'r')
 >>>
 >>> # ファイルの読み込み、クローズ
 >>> lines = f.readlines()
 >>> f.close()
 >>>
 >>> # ファイルの内容を表示
 >>> for line in lines:
 ...     print line
 ...
 aaa
 →テキストファイルの内容(aaa)が表示されます


Pythonに触れてみる(3)



Pythonに触り始めて2日目。
基本的な触り方を続けて見ていきます。


■真/偽(bool)を使う

 単純に変数に入れてprint
 >>> value1 = True
 >>> print value1
 True
 >>> print int(value1)
 1
 →そのままprintだとTrueの出力がされてます。

 -----

 Trueと1の比較
 >>> value1 = True
 >>> if value1 == 1:
 ...     print "True"
 ... else:
 ...     print "False"
 ...
 True
 →比較の結果、等価とみなされています。


■変数へ値を入れる

 今さらですが、なじみの無い書き方ができるようなので
 >>> a, b = 1, 2
 >>> print a
 1
 >>> print b
 2

 -----

 異なる型でも同じように
 >>> c, d = 10, 'aaa'
 >>> print c
 10
 >>> print d
 aaa
 →こんな書き方ができるんですね。実際には複数行に分けて書きそうなので、出番はないかも・・・


 ■繰り返し(for文)

 何も考えず
 >>> for x in (1, 2, 3):
 ...     print x
 ...
 1
 2
 3

 -----
 
 forブロックの後ろでxを確認してみると
 >>> print x
 3
 →xは存在していて、最後の値である3が出力されてました。

 -----

 for文にelse??
 >>> for x in (1, 2, 3):
 ...     print x
 ... else:
 ...     print "終わり"
 ...
 1
 2
 3
 終わり
 →繰り返しの終わり(繰り返し条件を満たさなくなった)ところで実行されてます。

 -----

 次へ(continue)
 >>> for x in (1, 2, 3)
 ...     continue
 ...     print x
 ... else:
 ...     print "終わり"
 ...
 終わり
 →乱暴ですが。。。print前に次の要素へ進めて、最後にelseの"終わり"が出力されてます。

 -----

 中断(break)
 >>> for x in (1, 2, 3):
 ...     break
 ...     print x
 ... else:
 ...     print "終わり"
 ...

 →中断をした場合は、else部分の処理もされてません。
 
繰り返しでelseが使えるのは面白いかも知れませんね

2015年8月26日水曜日

Python モジュールを追加

何ができるか、まだまだ理解が出来ていませんが
試しにモジュールを追加してみる。

対象 : jinja2-2.8

■環境
 Windows 7 Ultimate (64bit)
 + IronPython 2.7.5


■追加手順
 (1)jinja2を入手
  →jinja2-2.8.tar.gz (2015/08/26時点の最新)

 (2)解凍した中の「jinja2」フォルダをIronPythonインストール先の「Lib\site-packages」以下へコピー

 (3)テキストファイル「jinja2.pth」を作成し、テキスト「jinja2」(フォルダ名)を記述

 (4)上で作成したテキストファイルを「Lib\site-packages」へ配置

 -----
 ここで、IronPython Consoleを起動して確認してみると・・・
 >>> import jinja2
 Traceback (most recent call last):
  (省略)
 ImportError: No module named markupsafe
 →markupsageが無いと怒られる。
 -----

 (5)markupsafeを入手
  →Markupsafe-0.23.tar.gz(2015/08/26時点の最新)

 (6)解凍した中の「markupsafe」フォルダを同様に「Lib\site-packages」以下へコピー

 (7)テキストファイル「markupsafe.pth」を作成し、テキスト「markupsafe」を記述

 (8)上で作成したテキストファイルを「Lib\site-packages」へ配置


■確認
 >>> import jinja2
 >>>
 →エラーが表示されなくなる

Pythonに触れてみる(2)


触ってみない事には始まらないので、何も考えずConsoleを起動してみます。
 
 [スタート]メニューから[IronPython 2.7]→[IronPython Console]

























「何かを書いてみる」というレベルではないので、シンプルが一番。
エディタとしてVisual Studio環境を利用するのは
かなり先の話かも知れません。

■お約束の「Hello World!」

 >>> print "Hello World!"
 Hello World!

 -----
 せっかく .NET Frameworkが利用出来るので、ちょっと脱線するようですが

 >>> import System.Console
 >>> System.Console.WriteLine("Hello World!")
 Hello World!


■数値や文字

 なんて事のない、変数に値を入れて、printで出力するだけ。
 >>> value1 = 3
 >>> value2 = "string"
 >>>
 >>> print value1
 3
 >>> print value2
 string

 -----
 単純に演算を含めてみると
 >>> print value1 + 2
 5
 >>> print value2 + "!!"
 string!!

 -----
 数値と文字で演算(1)
 >>> print value1 + value2
 →数値と文字(文字列)の加算で怒られます。。(安直過ぎ)

 数値を文字に変換する必要がありました。
 >>> print str(value1) + value2
 3string

 -----
 数値と文字で演算(2)
 >>> print value2 * value1
 stringstringstring
 →*3(value1)でvalue2の文字列が3回繰り返されます!!
  PowerShellでも「文字列*(数値)」で繰り返しの結果が得られますが、ちょっと不思議な感覚が抜けません。。


■リスト

 要素(数値や文字など)の並びを作る?
 >>> numlist = (10, 20, 30)
 >>> print numlist
 (10, 20, 30)

 -----
 リストの要素にアクセス
 >>> print numlist[1]
 20
 →0始まりなので、[1]は2番目の要素

 >>> print numlist[-1]
 30
 →末尾方向からの参照ができる!(新鮮な感じがします)

 仕方がないかも知れませんが、先頭からは0開始で末尾からは1開始なのは
 少し気持ち悪いかも知れません。。
 
numlist102030
先頭からの添え字[0][1][2]
末尾からの添え字[-3][-2][-1]




Pythonに触れてみる(1)


 とりあえず触れてみようと考えて、環境を準備しました。
 IronPython 2.7 

 最初に検索をかけて見て、いくつかの選択肢がある事が分かり迷いましたが...
 始める前から考え過ぎても仕方がないので、以下の理由からIronPythonを選びました。

 ・.NET Frameworkが使える

 少なくとも、スタートは純粋にPythonに触れられれば良いと考えているので、意味のない理由かも知れませんが、何か不都合が出た時に道具を変えれば良いだけと思います。

 ■環境
  Windows 7 Ultimate Service Pack 1 (64bit)
  + Visual Studio 2013

 ■インストール
  ・Python Tools for Visual Studio
  ・IronPython-2.7.5