データ分析実践
中級問題チェック

問題 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)