/python/numpy/array01
概要
しましま先生の神スライドとSciPy神チュートリアルを見つつ、pythonとnumpyを勉強する。ついでにhtmlを勉強する。
要するにコピペなので、当ページに価値はない。
ドットインストールでpythonの基礎勉強した人用。
本で言うなら、みんなのpythonを流し読みしたくらい。
はじめに
pythonモジュール(pythonの場合は、importとかされる定義ファイルがモジュール。他のモジュールを読み込むモジュールがパッケージらしい)のnumpy,scipy,scikit-learnの使い方を実践しつつpythonを勉強する。
環境は以下のものを使用する。
- MacOSX:10.6.7
- インタラクティブシェル:bpython(たまにipython)
関数の引数と変数に対応したメソッドを提示するという、激烈に優秀な補完が出来る - 他:
bpythonの用意
brew install pip pip install bpython
インストールされる場所は、
homebrew/share/python/bpython
pythonの中では、以下のモジュールを使う。
import numpy as np import scipy as sp import matplotlib.pyplot as plt import sklearn
行列(配列)の基本
N次元配列を作る方法(2通り)
- 多重リスト
- 初期状態から使える(リストなので当然)
- あとから形を変更できる
- 要素の型を統一しなくて良い
- n-D-Array
- numpy環境下でのみ使える
- 形を変更できない(変更できるが、内部的には削除後、再生成している)
- 要素の型を統一しなくてはならない
- 計算が早い
要するに、多重リストは柔軟であり、N-d-Arrayは柔軟ではない分高速である。
機会学習的にはテンソルの形を変更しないので(nモード積:テンソルを行列に変形して行う積が怖いけど、たぶんTheanoがサポートしてくれてる)、N-d-Arrayで良い。
では、実際に行列(テンソル)を作ってみる。
np.array([1,2,3]) np.array([[1,2,3],range(1,4)]) np.arange(60).reshape(3,4,5)
np.arrayというのが、R言語で言うところのarray関数のようだ。
.reshapeで形状変化をさせて、テンソルとかを作るようだ。
実行するとこんなのが出てくる。
ちなみにtypeはnumpy.ndarrayとなる。
Out[47]: array([1, 2, 3])Out[48]:
array([[1, 2, 3],
[1, 2, 3]])
Out[49]:
array([[[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19]],
[[20, 21, 22, 23, 24],
[25, 26, 27, 28, 29],
[30, 31, 32, 33, 34],
[35, 36, 37, 38, 39]],
[[40, 41, 42, 43, 44],
[45, 46, 47, 48, 49],
[50, 51, 52, 53, 54],
[55, 56, 57, 58, 59]]])
A = np.arange(60).reshape(3,4,5) A[0,1,2] A[range(3),0,0] A = A.reshape(3,2,5,2) print A A[1,1,1,1]
Out[59]: 7
Out[60]: array([ 0, 20, 40])
Out[61]:
array([[[[ 0, 1],
[ 2, 3],
[ 4, 5],
[ 6, 7],
[ 8, 9]], [[10, 11],
[12, 13],
[14, 15],
[16, 17],
[18, 19]]],
[[[20, 21],
[22, 23],
[24, 25],
[26, 27],
[28, 29]],
[[30, 31],
[32, 33],
[34, 35],
[36, 37],
[38, 39]]],
[[[40, 41],
[42, 43],
[44, 45],
[46, 47],
[48, 49]],
[[50, 51],
[52, 53],
[54, 55],
[56, 57],
[58, 59]]]])
Out[76]: 33
どうもarrayの呼び出しは、reshapeの順番と同じ要素を取り出してくれるようだ。
つまり、reshape(a,b,c,d)と指定して、A[0,0,0,1]とすると、a,b,cの一番目、dの二番目の要素が取り出せる。