(Translated by https://www.hiragana.jp/)
NumPy - Wikipedia

NumPy

プログラミング言語げんごPythonにおいて数値すうち計算けいさん効率こうりつてきおこなうための拡張かくちょうモジュール

NumPyは、プログラミング言語げんごPythonにおいて数値すうち計算けいさん効率こうりつてきおこなうための拡張かくちょうモジュールである。効率こうりつてき数値すうち計算けいさんおこなうための型付かたつきの多次元たじげん配列はいれつたとえばベクトルや行列ぎょうれつなどを表現ひょうげんできる)のサポートをPythonにくわえるとともに、それらを操作そうさするためのだい規模きぼ高水準こうすいじゅん数学すうがく関数かんすうライブラリを提供ていきょうする。

NumPy
作者さくしゃ Travis Oliphant
開発元かいはつもと コミュニティ開発かいはつ
初版しょはん 1995ねん (1995)
最新さいしんばん 2.0.0[1] ウィキデータを編集 - 2024ねん6がつ16にち (23にちまえ) [±]
リポジトリ ウィキデータを編集
プログラミング
言語げんご
Python
対応たいおうOS クロスプラットフォーム
種別しゅべつ 数値すうち計算けいさん
ライセンス 修正しゅうせいBSDライセンス
公式こうしきサイト numpy.org ウィキデータを編集
テンプレートを表示ひょうじ

沿革えんかく

編集へんしゅう

NumPyの祖先そせんであるNumericはジム・ハグニン英語えいごばんらによって開発かいはつされた。その2005ねんトラヴィス・オリファント英語えいごばんが、Numarrayの機能きのうをNumericにみ、そこへ大幅おおはば修正しゅうせいくわえることで、NumPyを開発かいはつした。NumPyはオープンソースソフトウェアであり、多数たすう開発かいはつしゃ寄与きよしている。

NumPyは、Python 2.4から2.7 および Python 3.1以降いこう使用しようできる。2011ねんには、PyPyようNumPy APIの開発かいはつ開始かいしされた。またNumPyをCython記述きじゅつ高速こうそくはかっている。

目的もくてき

編集へんしゅう

Python動的どうてき型付かたつ言語げんごであるため、プログラムを柔軟じゅうなん記述きじゅつできる一方いっぽうで、純粋じゅんすいにPythonのみを使つかって数値すうち計算けいさんおこなうと、ほとんどの場合ばあいC言語げんごJavaなどの静的せいてき型付かたつ言語げんごいたコードにくらべて大幅おおはば計算けいさん時間じかんがかかる。そこでNumPyは、Pythonにたいして型付かたつきの多次元たじげん配列はいれつオブジェクト (numpy.ndarray) と、その配列はいれつたいする多数たすう演算えんざん関数かんすう操作そうさ関数かんすう提供ていきょうすることにより、この問題もんだい解決かいけつしようとしている。NumPyの内部ないぶはC言語げんご (およびFortran)によって実装じっそうされているため非常ひじょう高速こうそく動作どうさする。したがって、目的もくてき処理しょりを、おおきな多次元たじげん配列はいれつ(ベクトル・行列ぎょうれつなど)にたいする演算えんざんとして記述きじゅつできれば(ベクトルできれば)、計算けいさん時間じかん大半たいはんはPythonではなくC言語げんごによるネイティブコード実行じっこうされるようになり大幅おおはば高速こうそくする。さらに、NumPyは BLAS APIを実装じっそうした行列ぎょうれつ演算えんざんライブラリ (OpenBLAS, ATLAS, Intel Math Kernel Library など)を使用しようして線形せんけい代数だいすう演算えんざんおこなうため、C言語げんご単純たんじゅんいた線形せんけい代数だいすう演算えんざんよりも高速こうそく動作どうさしうる[2]速度そくどちるが BLAS ライブラリを使用しようしないコンパイルも可能かのう)。

一般いっぱんに、行列ぎょうれつ演算えんざんにおいてはメモリ帯域たいいきがボトルネックになることおおい。NumPyのAPIの構造こうぞうじょうとく複数ふくすう演算えんざんつらなる場合ばあいに、余計よけいなメモリのきが多発たはつする。その問題もんだい解決かいけつし、不要ふようなメモリのきを減少げんしょうさせるために、NumPyを利用りようして動作どうさするNumexprが開発かいはつされている[3]

MATLAB との比較ひかく

編集へんしゅう

PythonとNumPyのわせはMATLABちか機能きのうせい提供ていきょうするため、NumPyをMATLABのフリーな代替だいたいぶつとして使用しようするものもいる。いずれも動的どうてきプログラミング言語げんごとしてのたか柔軟じゅうなんせいち、配列はいれつ行列ぎょうれつもちいた高速こうそく演算えんざんおこなうことができる。両者りょうしゃ比較ひかくとしては、MATLABはプロプライエタリ製品せいひんであり高価こうかだが、みの数学すうがく関数かんすう多数たすうそなえ、さらに様々さまざま用途ようとのための実用じつようてきなパッケージやSimulinkのようなツールボックスが提供ていきょうされている。その一方いっぽうで、NumPyは、MATLABよりも汎用はんようてきかつ現代げんだいてきなプログラミング言語げんごであるPythonに統合とうごうされており、なおかつPythonはオープンソースかつフリーである。NumPyには各種かくしゅ補助ほじょてきなライブラリが存在そんざいし、たとえば、SciPyは、さらにMATLABてき科学かがく計算けいさん関数かんすうをNumPyに追加ついかするライブラリであり、MatplotlibはMATLABライクなグラフ描画びょうが機能きのう提供ていきょうするパッケージである。NumPyとMATLABの両者りょうしゃはともに、LAPACK APIを経由けいゆして、行列ぎょうれつ演算えんざんライブラリによる演算えんざんおこなっている。

以下いかれいでは、NumPyとmatplotlibもちいて、Pythonの対話たいわ環境かんきょうにおける非常ひじょう単純たんじゅんなベクトル操作そうさとプロットを実演じつえんしている。

>>> import numpy
>>> from matplotlib import pyplot
>>> x = numpy.linspace(0, 2 * numpy.pi, 100)
>>> y = numpy.sin(x)
>>> pyplot.plot(x, y)
>>> pyplot.show()

不規則ふきそく配列はいれつ

編集へんしゅう

多次元たじげん配列はいれつ(テンソル)のうち、要素ようそことなるながさをつものを不規則ふきそく配列はいれつえい: ragged array)という[4][5]。NumPyは固定こていのshapeをもつ多次元たじげん配列はいれつたか効率こうりつ計算けいさんすることにとくしたライブラリであり、不規則ふきそく配列はいれつ基本きほんてきにサポートしていない[6]明示めいじてきobjectかた配列はいれつ作成さくせいすることで不規則ふきそく配列はいれつ操作そうさすることは可能かのうである(自動じどう推論すいろん推奨すいしょうされた[7])が、あくまでポインタ配列はいれつであり、メモリレイアウトとうのNumPy機能きのうはサポートされない。

脚注きゃくちゅう

編集へんしゅう
  1. ^ https://numpy.org/doc/stable/release/2.0.0-notes.html.
  2. ^ SciPy PerformancePython”. 2009ねん9がつ28にち閲覧えつらん
  3. ^ pydata/numexpr - GitHub
  4. ^ "they sometimes err in matching the lengths of the nested sequences, commonly called 'ragged arrays'." NEP 34 — Disallow inferring dtype=object from sequences. NumPy.
  5. ^ "Ragged tensors are the TensorFlow equivalent of nested variable-length lists." Ragged tensors. TensorFlow Core.
  6. ^ "NumPy doesn’t support ragged arrays" Special types. h5py.
  7. ^ "will force users who actually wish to create object arrays to specify that explicitly." NEP 34 — Disallow inferring dtype=object from sequences. NumPy.

関連かんれん項目こうもく

編集へんしゅう

脚注きゃくちゅう

編集へんしゅう
  1. ^ JAX: Autograd and XLA”. 2020ねん11月19にち閲覧えつらん

外部がいぶリンク

編集へんしゅう