web-dev-qa-db-ja.com

numpy astypeからfloat32からfloat16へ

Numpyがfloat32からfloat16にキャストする方法を知りたいです。astypeを使用して8193のような数値をfloat32からfloat16にキャストすると、10192がfloat32から10,000にキャストされ、1032がfloat16にキャストされます。

import numpy as np
a = np.array([8193], dtype=np.float32)
b = a.astype(np.float16)
9
Nan

IEEE 754-2008 16ビットベース2形式(別名binary16)では、それほどの精度は得られません。 16ビットに何を期待しますか? :) 1ビットは符号ビットであり、5ビットは指数に使用され、10ビットは正規化された11ビットの仮数を格納するため、2 ** 11 == 2048を超えるものはすべて量子化する必要があります。

Wikipedia によると、4097〜8192の整数は4の倍数に丸められ、8193〜16384の整数は8の倍数に丸められます。

5
PM 2Ring