Python学習チャンネル by PyQ

Pythonのオンライン学習プラットフォームPyQのオフィシャルブログです

NumPyの最新バージョン、NumPy 2.0を紹介します

こんにちはPyQサポートです。

2024年6月16日に NumPy 2.0.0 がリリースされました。
約18年ぶりのメジャーバージョンアップであり、さまざまな改善が行われました。
本記事では、以下の変更点をピックアップして紹介します。

  • パフォーマンスの改善
  • コードが整理され、わかりやすさが向上
  • 64ビット版Windowsでの標準の整数型の変更(他のプラットフォームとの統一)

NumPy 2.0.0についてより詳しく知りたい方は、NumPy 公式ドキュメントの NumPy 2.0.0のリリースノート をお読みください。

NumPy 2.0.0のリリースの概要

名称NumPy
リリースバージョンNumPy 2.0.0
リリース日2024年6月16日
サポートしているPython3.9、3.10、3.11、3.12
リリースノートhttps://numpy.org/doc/stable/release/2.0.0-notes.html

パフォーマンスの改善

データの並べ替えに使う関数sort()argsort() など)が、IntelやGoogleが開発した高速なライブラリを採用したことで、以前と比べて格段に速く なりました。この改善は、大量のデータを扱うときに特に効果を発揮します。

実際に、並び替えを行うsort()関数の処理速度を、NumPy 1.26.4と2.0.0で比較してみましょう。
事前準備としてJupyter Notebookを開き、次のように巨大なNumPy配列のデータを用意します。

import numpy as np

# 大きなランダムデータセットを作成
rng = np.random.default_rng(0)
data = rng.random(1_000_000)  # 100万要素あるNumPy配列を作成

次に、下記のように %timeit コマンドを使ってsort()の処理速度を計測してみます。

%timeit np.sort(data)

今回実行した環境では、1.26.4と2.0.0で次のような結果になりました。

1.26.4の計測結果:

118 ms ± 12 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

2.0.0の計測結果:

21.4 ms ± 1.39 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

1.26.4では約118ミリ秒かかっていた処理が、2.0.0では約21.4ミリ秒になっており、5倍以上速くなっている ことがわかります。

コードが整理され、わかりやすさが向上

コードが整理され、使われていない関数や、他の関数と役割が重複している関数が削除 されました。
たとえば2.0.0以前では、NumPy配列を.npyファイルに保存する関数として次の2つがありました。

  • numpy.save()
  • numpy.lib.npyio.save() (2.0.0で削除)

同じ機能を持つ関数が複数あるのはわかりにくいため、2.0.0では numpy.lib.npyio.save() は削除されています。

これらの重複する関数などの整備が行われたことにより、NumPy 2.0.0では、メインの名前空間にあるオブジェクトの数が約10%削減 されました。特に、numpy.lib モジュールは約80%も削減 されています。
この改善によって、ユーザーにとって本当に必要な関数がわかりやすくなりました。

またNumPy 2.0.0 では、公開APIとプライベートAPIがはっきりと区別 されるようになりました。
今までは numpy.core という内部的に使われているモジュールが誰でも使える状態になっていましたが、これは本来ユーザーが直接利用することを想定しないものでした。
そのため、2.0.0ではnumpy._core という名称に変更され、公式に非公開になりました。
これにより、 内部的に使われているだけの関数を誤って使う恐れがなくなり、初心者の方でも安心して使える ようになっています。

注意点

今回のリリースでNumPyのコードが整理された結果、 後方互換性がなくなった 部分があります。 これにより、以前のバージョンで動作していたコードが、NumPy 2.0.0 ではエラーを起こすことがあるので注意しましょう。

たとえば、今回削除された関数を使用した場合、AttributeError が発生します。 これは 「このオブジェクトにはその属性(関数やメソッド)が存在しない」 というエラーです。

もし今まで動いていたコードがNumPy 2.0.0 にバージョンを上げたことで動かなくなった場合、公式のAPIリファレンス移行ガイドを参考に、最新の推奨される方法にコードを修正 しましょう。

64ビット版Windowsでの標準の整数型の変更

これまで64ビット版のWindows環境では、NumPyの標準の整数型が32ビットになっており、他のプラットフォームとの間で不整合が発生することがありました。
しかしNumPy 2.0.0では、64ビット版Windowsでの標準の整数型が64ビットに変更 され、他のプラットフォームと動作が統一 されました。
これにより、より多くの環境で、安心してNumPyを使えるようになっています。

その他

これらの変更点に加えて、さまざまな新機能の追加や、内部構造の改善が行われています。
より詳細な情報を知りたい方は、公式のリリースノートを参照してください。

numpy.org

まとめ

本記事では、NumPy 2.0.0の更新内容をピックアップして紹介しました。
特に、パフォーマンスの向上によって大規模データセットの処理がスムーズに行えるようになったのは嬉しい改善ですね。
ぜひ、実際に試してみてください。

Copyright ©2017- BeProud Inc. All rights reserved.