• トップ
  • ブログ一覧
  • 【入門】データサイエンス力を向上させるNumPy(ナムパイ)徹底解説!
  • 【入門】データサイエンス力を向上させるNumPy(ナムパイ)徹底解説!

    メディアチームメディアチーム
    2019.07.11

    IT技術

    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関数を持っていました。

    そこに、その後リリースされたNumericNumArrayを統合して、現在Pythonの数値計算ライブラリのスタンダードといえるNumPy(ナムパイ)が開発されました。

    Numpyは、その使いやすさで人気を博すことになります。

    現在、ディープラーニングのライブラリとして使われているTensorflowやChainerもNumPyを利用しているのも特筆する点と言えるでしょう。

    実行速度が早い

    Pythonは、C言語やJavaとは違ってコンパイルなしで動かすことのできるスクリプト言語ですので、プログラムを書いてすぐに実行できます。

    しかし、プログラムは作成しやすい反面、インタープリタ形式で実行されますので、実行速度が遅いのがデメリットです。

    数値計算では、整数演算、浮動小数点演算とも実行速度が要求されます。

    そこで、NumPyでは、実行速度を上げるため、C言語で記述されており、デメリットをカバーしているのです。

    NumPyの配列演算

    それでは、NumPyの配列演算についてみていきましょう。

    NumPyのデータの基本は、配列(ndarray)で、Pythonのリスト(list)とは異なり、固定長でかつ要素がすべて同じ型であるという特殊なデータ構造をしています。

    配列を対象とするため、配列の全ての要素に対する演算では、通常のPythonに必要なforループのような繰り返しは必要ありません。

    通常のループによるプログラム

    1import math
    2theta = [math.pi/6,math.pi/4,math.pi/3]
    3for i in theta:
    4   print(math.sin(i))

    0.49999999999999994
    0.7071067811865476
    0.8660254037844386

    numpyの配列演算

    1import numpy as np
    2theta = np.array([np.pi/6,np.pi/4,np.pi/3])
    3np.sin(theta)

    array([0.5 , 0.70710678, 0.8660254 ])

    このように一括演算が可能なため、わざわざループの形で書く必要がありません。

    すべての要素に1を足す演算

    0から4までの数のリストを作り、そのすべての要素に1を足す演算は次のように書けます。

    1a = np.arange(5)
    2a

    array([0, 1, 2, 3, 4])

    1a + 1

    array([1, 2, 3, 4, 5])

    このようにスカラーとの足し算やスカラー倍は要素ごとに行うのです。

    アダマール積

    2つのndarrayの積(アダマール積)は要素ごとに行います。

    1a = np.array([0, 1, 2, 3, 4])
    2b = np.array([2, 4, 6, 8, 10])
    3a * b

    array([ 0, 4, 12, 24, 40])

    1次元配列(ベクトル)の内積

    1次元配列(ベクトル)の内積や2次元配列(行列)の積は専用の関数で計算できます。

    1a = np.array([1, 2])
    2b = np.array([4, 3])
    3np.dot(a, b)

    10

    2次元配列(行列)の積

    1a = np.array([[1, 2], [3, 4]])
    2b = np.array([[4, 3], [2, 1]])
    3np.dot(a, b)

    array([[ 8, 5],[20, 13]])

    通常のプログラムでは、行列の掛け算に3重ループが必要なのに比べ、全くループを必要としません。

    こういうところにプログラムの書きやすさが考慮されています。

    NumPyの良い点

    1. 行列専用のクラスmatrixが用意されていてmatrix同士の積は演算子*を使うことができる
    2. 行列式の値や主成分分析で必要な固有値、固有ベクトルの計算も専用の関数でできる
    3. 統計学で必要な標準偏差、分散、相関係数、回帰分析なども統計処理用関数でできる
    4. ニューラルネットワークで使われる畳み込み演算(コンボリューション)がNumPyには、組み込まれているため、ディープラーニングのプログラムを記述することが比較的容易にできる

    Scipy(サイパイ)について

    さらに、高度な科学技術計算を行うためにScipyというライブラリが存在します。

    Scipyは、Pythonの科学技術計算ルーチンの中核をなすパッケージです。

    NumPyとScipyは、お互い密接に協力しあって動作しています。

    Scipyでは、統計処理、信号処理、画像解析、フーリエ変換など高度な計算を簡単に記述することができます。

    こちらの記事もオススメ!

    featureImg2020.07.28機械学習 特集知識編人工知能・機械学習でよく使われるワード徹底まとめ!機械学習の元祖「パーセプトロン」とは?【人工知能】ニューラルネ...

    featureImg2020.07.17ライトコード的「やってみた!」シリーズ「やってみた!」を集めました!(株)ライトコードが今まで作ってきた「やってみた!」記事を集めてみました!※作成日が新し...

    Numpyの関連記事

    featureImg2020.01.09【Python】Numpyにおける軸の概念~2次元配列と3次元配列と転置行列~Numpyにおける軸の概念機械学習の分野では、行列の操作がよく出てきます。PythonのNumpyという外部ライブラリ...

    featureImg2020.04.06【Python】NumPyを使って「面接時の人事評価」と「仕事の出来」を相関係数で考えてみたNumpy で面接時の人事評価と その後の仕事の出来の関係を見る仕事ができる人を予測するための「良い指標」とは何でしょ...

    ライトコードでは、エンジニアを積極採用中!

    ライトコードでは、エンジニアを積極採用しています!社長と一杯しながらお話しする機会もご用意しております。そのほかカジュアル面談等もございますので、くわしくは採用情報をご確認ください。

    採用情報へ

    メディアチーム
    メディアチーム
    Show more...

    おすすめ記事

    エンジニア大募集中!

    ライトコードでは、エンジニアを積極採用中です。

    特に、WEBエンジニアとモバイルエンジニアは是非ご応募お待ちしております!

    また、フリーランスエンジニア様も大募集中です。

    background