*作成中*
markdownよりhtmlでかいたほうが楽な気がしてきた。
勉強したことをアウトプットする、簡単にそれができるようにしたいね
はじめに
ipythonを起動する
$ ipython
numpyをimportする
In [1]: import numpy as np
配列をつくる
In [2]: x = np.array([range(x, x + 4) for x in [1, 3, 5, 7]])
In [3]: x
Out[3]:
array([[ 1, 2, 3, 4],
[ 3, 4, 5, 6],
[ 5, 6, 7, 8],
[ 7, 8, 9, 10]])
numpy配列の属性
In [4]: x.ndim
Out[4]: 2
In [5]: x.shape
Out[5]: (4, 4)
In [6]: x.size
Out[6]: 16
In [7]: x.dtype
Out[7]: dtype('int64')
In [8]: x.itemsize
Out[8]: 8
In [9]: x.nbytes
Out[9]: 128
numpy配列のインデックス操作
In [10]: x[1, 2]
Out[10]: 5
In [11]: x[2]
Out[12]: array([5, 6, 7, 8])
In [13]: x[-1]
Out[13]: array([ 7, 8, 9, 10])
In [14]: x[2, -1]
Out[14]: 8
負の数も使える。
numpy配列のスライス操作
In [15]: x[:2]
Out[15]:
array([[1, 2, 3, 4],
[3, 4, 5, 6]])
In [16]: x[2:]
Out[16]:
array([[ 5, 6, 7, 8],
[ 7, 8, 9, 10]])
In [17]: x[2:, 1]
Out[17]: array([6, 8])
In [18]: x[2, 1:]
Out[18]: array([6, 7, 8])
In [19]: x[:, 0]
Out[19]: array([1, 3, 5, 7])
In [20]: x[0, :]
Out[20]: array([1, 2, 3, 4])
配列の中の部分列を取り出す操作。
特に重要なのは最後2つ。それぞれ、行、列を取り出す。
numpy配列のビュー
In [21]: x_sub = x[:3, :3]
In [22]: x_sub
Out[22]:
array([[1, 2, 3],
[3, 4, 5],
[5, 6, 7]])
In [23]: x_sub[1, 1] = 999
In [24]: x_sub
Out[24]:
array([[ 1, 2, 3],
[ 3, 999, 5],
[ 5, 6, 7]])
In [25]: x
Out[25]:
array([[ 1, 2, 3, 4],
[ 3, 999, 5, 6],
[ 5, 6, 7, 8],
[ 7, 8, 9, 10]])
ということで、部分列は元の列のポインタになっていることがわかる。
大きな配列の一部分だけ編集したいときは、
このように必要な部分だけ取り出す。
コピーが必要なときは以下のように。
numpy配列のコピー
In [26]: x_sub = x[:3, :3].copy()
In [27]: x_sub
Out[27]:
array([[ 1, 2, 3],
[ 3, 999, 5],
[ 5, 6, 7]])
In [28]: x_sub[1, 1] = 888
In [29]: x_sub
Out[29]:
array([[ 1, 2, 3],
[ 3, 888, 5],
[ 5, 6, 7]])
In [30]: x
Out[30]:
array([[ 1, 2, 3, 4],
[ 3, 999, 5, 6],
[ 5, 6, 7, 8],
[ 7, 8, 9, 10]])
numpy配列の形状変更
数値の配置を変更するときに使う。例えば要素9のベクトルを3*3のベクトルにしたかったりするときに使う。
In [31]: np.arange(9)
Out[31]: array([0, 1, 2, 3, 4, 5, 6, 7, 8])
In [32]: np.arange(9).reshape(3, 3)
Out[32]:
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
numpy配列の連結
複数の配列を連結する。やり方3つ。
In [33]: a = np.arange(6).reshape(2, 3)
In [34]: a
Out[34]:
array([[0, 1, 2],
[3, 4, 5]])
In [35]: b = np.arange(6).reshape(2, 3)
In [36]: b
Out[36]:
array([[0, 1, 2],
[3, 4, 5]])
In [37]: c = np.concatenate([a, b])
In [38]: c
Out[38]:
array([[0, 1, 2],
[3, 4, 5],
[0, 1, 2],
[3, 4, 5]])
In [39]: d = np.array([91, 92, 93])
In [40]: d
Out[40]: array([91, 92, 93])
In [41]: e = np.vstack([a, d])
In [42]: e
Out[42]:
array([[ 0, 1, 2],
[ 3, 4, 5],
[91, 92, 93]])
In [43]: f = np.array([[99],[99]])
In [44]: f
Out[44]:
array([[99],
[99]])
In [45]: g = np.hstack([a, f])
In [46]: g
Out[46]:
array([[ 0, 1, 2, 99],
[ 3, 4, 5, 99]])
numpy配列の分割
複数の配列を分割する。やり方3つ。