私は、符号なし整数を型キャストするときに、python/numpyのやり方でやや混乱します。uint8にintを追加すると、不思議なtypecastingですか?
例:
In[0]: y
Out[0]: array([0], dtype=uint8)
IはUINT8がゼロに戻る255回のそれサイクルよりも大きい値を有する整数を格納することができないことを理解する:
import numpy as np
x = np.array([255], dtype=np.uint8)
y = x + 1
これは結果を与えます。私はこれを期待しています。
今、私は試してみてください。
In[1]: z
Out[1]: array([511], dtype=uint16)
をので、この場合には型がより多くを保持するために多くのバイトを1に変更されていますが、整数であることのみとき:与え
z = x + 256
追加されたものはそれ自体がより小さな型には適合しません。 (興味深いことにx + 255はuint16の結果を与えません)
これは私をいくらか奇妙な振る舞いにします。それの背後にある論理はありますか?私はもっと一貫していることは、最初の例の場合でもuint16への型の変更を行うことだと思っていたでしょう。
256はuint8として表現できません。 – adrianN
また、255 + 1もないので、なぜこれが起こりますか? – JesseC
numpyは結果のサイズではなく、オペランドのサイズを調べているようです。興味深い質問です。 –