🤔
[numpy] 計算結果がおかしくなる問題について
おかしくなる原因
異なる型で四則演算をすると結果がおかしくなる
int32とuint16の足し算
a = 1, b = -1として,その和を計算してみます.
型はそれぞれ a(int32), b(uint16)です.
test.py
a = np.array(1) #int32
b = np.array(-1).astype("uint16") #uint16
print(a + b)
結果 65536 (int32)
おかしな結果ですね。本来は0となるはずです。
足す方(a)をuint16にしてみる
今度は先ほどと型を逆転し、
a(uint16), b(int32)として,その和を計算してみます.
test.py
a = np.array(1).astype("uint16") #uint16
b = np.array(-1) #int32
print(a + b)
結果 0 (int32)
ちゃんと計算できました.
順番が大事
int32 + uint16はおかしくなりますが,
uint16 + int32だとうまくいきます
型で決められている最大値が小さいものに足すように計算するとうまくいきます.
uint16 (最大値65535),
int32 (最大値2,147,483,647)
どの型がどんな最大値をとる?
型の最大値を知っておく必要がありますが,
大体
uint < int < float
だと覚えておくと便利です。
他の型に関しては以下が参考になります.
最後に
型を合わせればこういった問題はおこらないので,型を合わせて計算するのが大事ということがわかりました.
Discussion