データ分析実践
中級問題チェック
問題 19 /40
NumPyとPython標準の数値計算に関して、正しい結果を得られるものはどれか。
選択 1
a = np.uint8(1)
b = np.uint8(2)
a - b
選択 2
np.array([64, 64], dtype='int8') * 2
選択 3
np.power(10, 10, dtype=np.int16)
選択 4
10**1000
解説
選択肢4が正解です。
Numpyのデータ型はビット数が決まっているため、数値が正しく計算できない場合があります。
【選択肢1】
a = np.uint8(1)
b = np.uint8(2)
a - b
▶︎
255
誤った結果です。
uint8は符号なし整数です。範囲は「0〜255」となり、マイナスの結果は計算できません。
int8であれば範囲が「-128〜127」になるため、正しい結果が返ります。
a = np.int8(1)
b = np.int8(2)
a - b
▶︎
-1
【選択肢2】
np.array([64, 64], dtype='int8') * 2
▶︎
array([-128, -128], dtype=int8)
誤った結果です。
ndarrayに数値を掛けてブロードキャストしていますが、int8の範囲は「-128〜127」のため、「128」は計算できません。
int16であれば、範囲が「-32768〜32767」のため計算できます。
np.array([64, 64], dtype='int16') * 2
▶︎
array([128, 128], dtype=int16)
【選択肢3】
np.power(10, 10, dtype=np.int16)
▶︎
-7168
誤った結果です。
10の10乗は10000000000です。int16の範囲は「-32768〜32767」のため計算できません。
【選択肢4】
10**1000
▶︎
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
正しい結果です。
Pyhton標準のint型はビット数の制限がないため、メモリの容量が許す限り値が続きます。
(公式書籍 p.148-150)