2013年2月1日金曜日

Numpy.Arrayが整数(Integer)型か浮動少数(Float)型か調べる

数値計算していると、整数型の配列を数値で割ったりすると
>>> a= np.ones(10, dtype=np.uint8)
>>> a /= 10.0
>>> print a
[0 0 0 0 0 0 0 0 0 0]

てな具合に0.1ではない結果になってしまう。

こんな場合は、arrayが整数型か浮動少数型か分けて処理をしたいとか、整数型だったら例外を投げるとかいう処理する必要があります。
例えば、
def normalize(arr):
    arr /= arr.sum()
というメソッドがあったとして、これに整数型を渡すと切り捨てられてしまうので、浮動少数型に限定したい。この場合、np.issubdtypeというメソッドで型が整数か浮動少数か調べます。
def normalize(arr):
    if np.issubdtype(arr.dtype, np.integer):
        raise ValueError("arr must be float.")
    arr /= arr.sum()
みたいな感じ。浮動少数か調べるにはnp.floatを使えばいいはず。
他に良い方法があったら教えて欲しいです。

0 件のコメント:

コメントを投稿