
【入門】データサイエンス力を向上させるNumPy(ナムパイ)徹底解説!
2020.08.13
R言語からPython(パイソン)へ
2019年現在、世界では人工知能(AI)の研究が各所で行われています。
人口知能技術は、今や一部の研究者だけにとどまらず、コンピュータサイエンスの基礎的な技術としてとらえられており、その応用分野は大きく広がっています。
エンジニアにとって、人工知能のスキルを身につけることでこれからの仕事の幅が大きく広がってくることは間違いありません。
今回は、その中でもNumPy(ナムパイ)について、掘り下げていきたいと思います!
こちらの記事もオススメ!
R言語とPython(パイソン)
人工知能の研究に限らず、Web開発、データサイエンスの分野で幅広く使われている言語がPython(パイソン)です。
米国IEEEが発行するオンラインマガジン「IEEE Spectrum」の2017年、2018年と2年続けてPythonがトッププログラミング言語に浮上しています。
これまで、データサイエンティストの選ぶプログラミング言語は、第1位がR言語でした。
ですが、現在は、「Python」が「R言語」に置き換わろうとしています。
R言語は、データ解析専用の特殊な言語で、専門性の高い人に使われていました。
なぜならR言語は、統計解析を含む数値解析用ライブラリが豊富だったのです。
R言語からPython(パイソン)へ
一方で、Pythonは汎用プログラミング言語としての特徴を持っており、特にプログラミングを学び始めた初心者にとっつきやすいような文法体系になっています。
また、R言語の強みであった数値解析用ライブラリもPythonに次第に移植されてきています。
現在では、統計分野だけでなく、人工知能分野で使われる「機械学習」や「ディープラーニング」において欠かせないライブラリがPython上で使えるようになっています。
そのため、データサイエンティストの裾野が広がるにつれ、学者や専門家しか使えないR言語よりも、一般のプログラマが容易に使えるPythonに人気が集まってきました。
NumPy(ナムパイ)について
Pythonは、当初から科学技術分野で発展してきているため、ラムダ関数やMap/Reduce関数を持っていました。
そこに、その後リリースされたNumericとNumArrayを統合して、現在Pythonの数値計算ライブラリのスタンダードといえるNumPy(ナムパイ)が開発されました。
Numpyは、その使いやすさで人気を博すことになります。
現在、ディープラーニングのライブラリとして使われているTensorflowやChainerもNumPyを利用しているのも特筆する点と言えるでしょう。
実行速度が早い
Pythonは、C言語やJavaとは違ってコンパイルなしで動かすことのできるスクリプト言語ですので、プログラムを書いてすぐに実行できます。
しかし、プログラムは作成しやすい反面、インタープリタ形式で実行されますので、実行速度が遅いのがデメリットです。
数値計算では、整数演算、浮動小数点演算とも実行速度が要求されます。
そこで、NumPyでは、実行速度を上げるため、C言語で記述されており、デメリットをカバーしているのです。
NumPyの配列演算
それでは、NumPyの配列演算についてみていきましょう。
NumPyのデータの基本は、配列(ndarray)で、Pythonのリスト(list)とは異なり、固定長でかつ要素がすべて同じ型であるという特殊なデータ構造をしています。
配列を対象とするため、配列の全ての要素に対する演算では、通常のPythonに必要なforループのような繰り返しは必要ありません。
通常のループによるプログラム
1 2 3 4 | import math theta = [math.pi/6,math.pi/4,math.pi/3] for i in theta: print(math.sin(i)) |
0.49999999999999994
0.7071067811865476
0.8660254037844386
numpyの配列演算
1 2 3 | import numpy as np theta = np.array([np.pi/6,np.pi/4,np.pi/3]) np.sin(theta) |
array([0.5 , 0.70710678, 0.8660254 ])
このように一括演算が可能なため、わざわざループの形で書く必要がありません。
すべての要素に1を足す演算
0から4までの数のリストを作り、そのすべての要素に1を足す演算は次のように書けます。
1 2 | a = np.arange(5) a |
array([0, 1, 2, 3, 4])
1 | a + 1 |
array([1, 2, 3, 4, 5])
このようにスカラーとの足し算やスカラー倍は要素ごとに行うのです。
アダマール積
2つのndarrayの積(アダマール積)は要素ごとに行います。
1 2 3 | a = np.array([0, 1, 2, 3, 4]) b = np.array([2, 4, 6, 8, 10]) a * b |
array([ 0, 4, 12, 24, 40])
1次元配列(ベクトル)の内積
1次元配列(ベクトル)の内積や2次元配列(行列)の積は専用の関数で計算できます。
1 2 3 | a = np.array([1, 2]) b = np.array([4, 3]) np.dot(a, b) |
10
2次元配列(行列)の積
1 2 3 | a = np.array([[1, 2], [3, 4]]) b = np.array([[4, 3], [2, 1]]) np.dot(a, b) |
array([[ 8, 5],[20, 13]])
通常のプログラムでは、行列の掛け算に3重ループが必要なのに比べ、全くループを必要としません。
こういうところにプログラムの書きやすさが考慮されています。
NumPyの良い点
- 行列専用のクラスmatrixが用意されていてmatrix同士の積は演算子*を使うことができる
- 行列式の値や主成分分析で必要な固有値、固有ベクトルの計算も専用の関数でできる
- 統計学で必要な標準偏差、分散、相関係数、回帰分析なども統計処理用関数でできる
- ニューラルネットワークで使われる畳み込み演算(コンボリューション)がNumPyには、組み込まれているため、ディープラーニングのプログラムを記述することが比較的容易にできる
Scipy(サイパイ)について
さらに、高度な科学技術計算を行うためにScipyというライブラリが存在します。
Scipyは、Pythonの科学技術計算ルーチンの中核をなすパッケージです。
NumPyとScipyは、お互い密接に協力しあって動作しています。
Scipyでは、統計処理、信号処理、画像解析、フーリエ変換など高度な計算を簡単に記述することができます。
(株)ライトコードは、WEB・アプリ・ゲーム開発に強い、「好きを仕事にするエンジニア集団」です。
Pythonでのシステム開発依頼・お見積もりはこちらまでお願いします。
また、Pythonが得意なエンジニアを積極採用中です!詳しくはこちらをご覧ください。
※現在、多数のお問合せを頂いており、返信に、多少お時間を頂く場合がございます。
こちらの記事もオススメ!
Numpyの関連記事
ライトコードよりお知らせ






一緒に働いてくれる仲間を募集しております!
ライトコードでは、仲間を募集しております!
当社のモットーは「好きなことを仕事にするエンジニア集団」「エンジニアによるエンジニアのための会社」。エンジニアであるあなたの「やってみたいこと」を全力で応援する会社です。
また、ライトコードは現在、急成長中!だからこそ、あなたにお任せしたいやりがいのあるお仕事は沢山あります。「コアメンバー」として活躍してくれる、あなたからのご応募をお待ちしております!
なお、ご応募の前に、「話しだけ聞いてみたい」「社内の雰囲気を知りたい」という方はこちらをご覧ください。
ライトコードでは一緒に働いていただける方を募集しております!
採用情報はこちら書いた人はこんな人

IT技術2021.03.02TypeScriptの型を問題形式で学べる「type-challenges」とは?
IT技術2021.03.01シスコルータのコンフィグ作成をPythonで自動化してみた!
IT技術2021.02.23【Unity】ARFoundation入門~機能解説から平面検知の実装まで~
IT技術2021.02.22Swiftでguardを使うメリットと使い方をご紹介!