仕事上、早々にを使えるようにしないといけないため、
を基に学んでいく。
前回
3. NumPyの基礎:配列とベクトル演算
は""の意味ででの数値計算におけるもっとも重要な基本パッケージの1つである。
3.1 NumPy ndarray:多次元配列オブジェクト
に対する算術操作は、その配列要素全てに作用する。
1次元はのリストと同じような振る舞いをするが、異なるのはスライスが元ののビューで、元ののコピーではない点である。
3.1.4 インデックス参照とスライシングの基礎
インデックス査証はデータからその一部を切り出す、もしくはその個々の要素を取り出す機能である。
import numpy as np arr = np.arange(10) print(arr) # インデックス参照 a = arr[5] print(a) b = arr[5:8] print(b) arr[5:8] = 12 # ブロードキャスト print(arr) # 重要なのは、スライスは元のndarrayのビューである点: b[0] = 1 print(arr) # bを変更したのにarrが変わっている b[:] = -5 print(arr) b = 5 # ちなみに左記は上のb[:]と挙動が異なる print(b) print(arr) ### 2次元配列 arr2d = np.array([[1,2,3],[4,5,6],[7,8,9]]) a = arr2d[2] print(a) b1 = arr2d[0][2] b2 = arr2d[0,2] print(b1) print(b2)
ビューとしているのは大量のデータを処理する場合にパフォーマンスおよびメモリ容量の問題が生じるためである。
3.1.5 スライスによるインデックス参照
でもスライス記法による切り出すが可能である。
arr = np.arange(10) arr2d = np.array([[1,2,3],[4,5,6],[7,8,9]]) a = arr[1:6] b = arr2d[:2] c = arr2d[:2,1:] print(a) print(b) print(c)
3.1.6 ブールインデックス参照
データの重複が許された配列からある値を持つものを取り出したいとする。このときブール値をもつインデックスで抽出することができる。
### ブールインデックスによる抽出 names = np.array(['Bob','Joe','Will','Bob','Will','Joe','Joe']) data = np.random.randn(len(names),4) # namesの各要素に対応する値とする(値自体に意味はない) # Bobに対応する値を抽出したい flg1 = names=='Bob' print(data) print(data[flg1]) print('*********************') # ブールインデックスは、スライスやスカラー値によるインデックスと併記可能 data[names == 'Bob',2:] # Bob以外に対応する値を抽出したい flg2 = names!='Bob' print(data) print(data[~flg1]) # ~:真偽を反転させる演算子 print(data[flg2])
論理演算子 | 意味 | |
---|---|---|
~, | 否定 | |
&, | 論理積 | |
|*1, | 論理和 |
3.1.6 ファンシーインデックス参照
インデックス参照に整数配列を用いる方法をファンシーインデックス参照という。
3.1.7 転置行列、行と列の入れ替え
の転置は、オリジナル行列を再配置した特別なビューを返す。コピーは生成しない。
# 転置:transpose関数または属性Tを参照 arr = np.arange(15).reshape(3,5) # 3×5に成型しなおす print(arr) print(arr.T) print(np.transpose(arr))