
「サイエンティフィックPythonのための」IDE、Spyder上にてScientific Python Lectures様のレクチャ実習中。今回はNumPyの実習6回目です。Numpy配列に詰めこむ要素の型についての練習です。基本「同じもの」を詰め込むのだけれども、いろいろできてしまうので忘却力の老人は覚えきれるか?
※「 ソフトな忘却力」投稿順 Index はこちら
※レクチャ実習中といっても、「準拠」しているのはレクチャの章立てくらいです。Scientific Python Lectures様のコースは例題だけでなく、エクササイズなども充実、それを全部順番に解いていったら必ずや立派な人になれるだろ~とは思います。でもキチンとやったら、死ぬまでに終わらない、と手抜き正当化。
整数配列にスカラーの浮動小数を足してみる
Pythonは結構、融通利かせてくれる処理系じゃないかと思います。NumPy配列についても例外じゃないようです。以下のように整数型の配列作っておいて、その全ての要素に浮動小数のスカラー値を足し込む、なんて操作を許してくれます。
import numpy as np s0 = np.arange(5) s1 = s0 + 0.77
何も言わないと、整数は int64型になるようですが、スカラーの浮動小数(これまた何も言わないとfloat64、倍精度型)を全要素に足し込むと結果はfloat64だと。大は小を兼ねるスタイル?
整数配列の一部に浮動小数を代入
上記は配列全体にスカラーを足し込んだので、全要素に対する操作でした。しかし個別要素への代入も可能っす。こんな感じ。
s0[0] = 9.99
この場合は int64 配列の一部への代入なので、浮動小数の小数点以下は切り捨てられて整数化されてしまうみたい。
型変換、丸め
なお、配列の型の変換を行うメソッドやら、丸めを行うメソッドなどもあり。こんな感じ。
s2 = s1.astype(np.int16) s3 = np.around(s1)
型の最大値、eps
また以下は配列の操作ではないですが、配列要素の「型」のスペック的なものを取り出すことも可能。
「構造体」の配列
なんとNumPyは、C言語でいう「構造体」の配列も作ることが可能でした。構造体のメンバには文字列でフィールド名つけられます。こんな感じ。
structA = np.zeros((3), dtype=[('idx', int),('v1', float)])
流石に構造体の中身までは表示してくれないみたい。
また、構造体配列に対する Fancy indexing も可能なので、条件を満たす要素の取り出しなども自在。便利だな。
NaNとマスクド配列
勿論、NumPyは、NaN(Not A Number)を扱うことが可能っす。ただし、NumPyのNaNは「静か」ではない方だけのようです。一方、MaskedArrayというものもあり、こちらを使うと、欠損値みたいなものを「その座席を確保」したまま、とりあえず無視して計算をすすめることができるみたい。こんな感じ。
型についても自由自在だと。ホントか?