
10
1
章
Python
ではじめる機械学習
ここで興味深い結果が、二つ現れました。一つ目はデータを格納するのにNumPyを使用した場合
(「Naive NumPy」に該当)、Pythonのリストを用いたときよりも3.5倍も時間がかかっていることで
す。これには驚いた人がいるかもしれません。Cで拡張されたライブラリを使用したのだから、早くな
ることを期待するのはもっともです。処理速度が遅い理由の一つは、Pythonから(NumPyのメソッド
を通じて)配列要素にアクセスするのに、通常より時間を要しているためです。処理速度を向上させる
ためには、最適化されたライブラリ内で処理を完結させる必要があります。上の例では、NumPyの関
数である
dot()
を使用したときが、それに該当します。この場合、25 倍以上も処理速度が向上してい
ます。以上をまとめると、実装しようとしているアルゴリズムについて、自前で書いたループ処理を、
最適化されたNumPyやSciPy
側に移すことはできないか、常に点検すべきということです。
ここで注意すべき点があります。それは、「速さには代償がつきものである」ということです。
NumPyの配列には、Pythonで使われるリストのような柔軟性はありません。Pythonのリストはどの
ようなデータタイプでも、まとめて格納することができますが、NumPyの場合、データタイプは一種
類だけしか格納できません。
>>>
a = np.array([1,2,3])
>>>
a.dtype
dtype('int64') ...