BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース NumPy 1.20が実行時SIMDサポートと型アノテーションを加えリリースされた

NumPy 1.20が実行時SIMDサポートと型アノテーションを加えリリースされた

ブックマーク

原文(投稿日:2021/03/04)へのリンク

新しくリリースされたNumPy 1.20は、パフォーマンスとドキュメントの改善を特徴としている。開発者は、NumPy関数に型アノテーションを使用できるようになった。SIMD(単一命令、複数データ)命令の幅広い使用により、ユニバーサル関数(ufunc)の実行速度が向上している。NumPyのドキュメントには、さらに大きな改善が見られた。

NumPyライブラリコードに型情報のアノテーションが付けられるようになった。そして、NumPyによって促進された変化により、Python 2がサポートされなくなった。あるコントリビュータは、変化の背景にある理由を次のように説明した

数年前にnumpy-stubsを開始したとき、NumPy自体に型アノテーションを付けるのは時期尚早のように見えました。私たちは、Python 2はサポートし続けていました。つまり、型のアノテーションには扱いにくいコメントを使用する必要がありました。
過去数年間で、科学的なPythonスタックにおいても、型アノテーションの使用がますます一般的になっています。たとえば、少なくともSciPy、pandas、xarrayには、APIタイプの少なくとも一部にアノテーションが付けられていることを私は知っています。shapeやdtypeに対するアノテーションがなくても、NumPyに対してほぼ完全なアノテーションを付けることは価値があります。NumPyは、科学スタックの最下部にあるプロジェクトです。

開発者は、追加で新しいタイプ(ArrayLikeDTypeLike)を使用できる。ArrayLikeタイプは、配列に変換できるオブジェクトに使用される。DTypeLikeは、dtypeに変換できるオブジェクトに使用される。データ型オブジェクト(numpy.dtype)は、配列項目に対応する固定サイズのメモリブロックの内容を指定するものである。特に項目のデータ型(整数、浮動小数点数など)、データのサイズ、バイト順序(little-endianまたはbig-endian)などに関する情報を含む。この2つの新しいタイプにより、タイプチェッカーは非効率的なパターンを認識し、ユーザに警告することができる。ドキュメントでは次のように説明されている。

DTypeLikeタイプは、以下のようなフィールドの辞書を使用してdtypeオブジェクトの作成を回避しようとする。

x = np.dtype({"field1": (float, 1), "field2": (int, 3)})

これは有効なNumpyコードであるが、この使用は推奨されないため、タイプチェッカーはこれについて警告する。

新しいnumpy.typingモジュールには、新しいタイプのエイリアスが含まれており、実行時にインポートできる。

from numpy.typing import ArrayLike
x: ArrayLike = [1, 2, 3, 4]

NumPy 1.20では、マルチプラットフォームのSIMDコンパイラの最適化も可能となる。NumPyは、CPUで利用できるようになったSIMD命令を検出し、それらを最適化できるようになった。ユーザは、いくつかの新しいビルド引数を使用してランタイム最適化動作を設定できる。--cpu-baseline引数は、必要な最適化の最小集合を指定するために使用される。--cpu-dispatchは、追加の最適化のために適用される集合を指定する。デフォルト値はmax -xop -fma4である。AMDレガシー機能を除くすべてのCPU機能を有効にするものである。--disable-optimizationを使って、ユーザは新しい改善をオプトアウトできる。

NumPy 1.20を使用するには、Python3.7以降にアップグレードする必要がある。NumPyのオンラインプレゼンスと新しいユーザへの親しみやすさを向上させる目的で、新しいNumPyリリースはドキュメントを大幅に改善した。このリリースでは、185の関連するプルリクエストを現在進行中の取り組みにマージすることに言及した。

NumPy 1.20は大規模なリリースであり、184人が参加した684のプルリクエストがマージされている。完全なリリースノートはオンラインで入手でき、追加機能と非推奨に関する情報が含まれている。

一部のユーザは、代替となる動的型プログラミング言語であるJuliaと比較していないことはないが、新しい型アノテーションを歓迎している。Juliaは、特にパフォーマンスの高い科学計算、機械学習、データマイニング、大規模線形代数、分散および並列計算を目的とした言語である。あるユーザはHackerNewsで次のように述べている

型アノテーションの話はJuliaの方が確かに優れています。NumPyが型アノテーションを持つことは、Juliaを選択しない多くのユーザにとって有益です。ここでは、大量の演算を行うことが主な目的ではなく、Pythonのライブラリがより良い状態となることが重要です。JuliaからPythonを呼び出すことの複雑さを避けたいでしょう。

NumPyはオープンソースのPythonライブラリである。大規模で多次元の同じ型の配列と行列のサポートが加わった。NumPyには、これらの配列、線形代数ルーチンなどを作成および変換するための一連の数学関数が含まれている。NumPyはSciPyの中核である。SciPyは、数学、科学、工学向けのオープンソースソフトウェアのPythonベースのエコシステムである。NumPyを使用すると、データサイエンティストは、データ分析タスクに対して生産的なスクリプト言語を使用できる。

この記事に星をつける

おすすめ度
スタイル

BT