数値計算を行ってみる!PythonのライブラリNumPyの使い方【初心者向け】
初心者向けにPythonで数値計算を行う上で便利なNumPyの使い方について詳しく解説しています。多次元配列の処理などを効率的に行うことができます。実際にいくつかの例を用いて書き方を説明しているので、ぜひ参考にしてみてください。
TechAcademyマガジンは受講者数No.1のオンラインプログラミングスクールTechAcademy [テックアカデミー]が運営。初心者向けに解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。
今回は、Pythonの数値計算ライブラリであるNumPyについて解説します。
NumPyを使うと、ベクトルや行列など、機械学習で必要となる形式のデータを簡単に扱うことができるようになります。
Pythonで機械学習を行うには、必須のライブラリですので、ぜひ、この記事を参考に、NumPyの使い方を覚えましょう。
なお本記事は、TechAcademyのAIオンライン講座の内容をもとに作成しています。
目次

田島メンター!NumPyというのは何でしょうか?

Pythonの数値計算のライブラリだよ。Pythonで機械学習を行うには、必須のライブラリなんだ。

どのような機能があるのですか?

例を見ながら説明していくね!
NumPyとは
NumPyは、Pythonで数値計算を効率的に行うためのライブラリです。NumPyはオープンソースで公開されており、個人/商用問わず、誰でも無料で利用することができます。
NumPyを使うと、ベクトルや行列などの多次元配列の処理を容易に行うことができるようになります。またPythonだけで数値計算を行うのと比較して、非常に高速に処理を行うことができます(NumPyの内部はC、及びFortranというプログラム言語で実装されています)。
機械学習は、多次元配列に対して演算を行いながらモデルを学習していきます。NumPyを使うとそのような処理が効率的に行えるようになるため、Pythonで機械学習を行うには、NumPyは必須のライブラリとなっています。
NumPyを利用するには
NumPyを利用するには、Anacondaなどの開発環境のパッケージを使うのが簡単です。
Anacondaは、データ分析やグラフ描画など、Pythonでよく利用されるライブラリを含んだ開発環境です。
AnacondaにNumPyをインストールするには、メニュー画面のEnvironmentsから、Not Installedを選択し、検索BOXに「NumPy」と入力します。一覧にNumPyが表示されますので、チェックボックスで選択し、画面右下のApplyボタンを押すことでインストールすることができます。
以降は、Jupyter Notebookをもとに、NumPyの使い方を説明します。
NumPyの使い方
NumPyを使う際は、初めにNumPyライブラリをインポートします。
import numpy as np
実行結果は特にありません。エラーがでなければ、正しくインポートされています。
NumPy配列を生成する
NumPyの配列はarray命令で作成します。
書き方:array(リスト、タプルなど)
np.array([1, 2, 3])
実行結果は以下のようになります。
多次元配列を作成することもできます。
np.array([[1, 2, 3], [4, 5, 6]])
実行結果は以下のようになります。
配列について確認する
NumPyの配列は、要素の型を混在させることができません。要素の型を確認するには、dtypeプロパティを使用します。
x = np.array([1, 2, 3]) x.dtype
実行結果は以下のようになります。
配列の構造を調べるには、shapeプロパティを使用します。
x = np.array([1, 2, 3]) x.shape
実行結果は以下のようになります。
全体の要素数を調べるには、sizeプロパティを使用します。
x = np.array([1, 2, 3]) x.size
実行結果は以下のようになります。
配列に要素を追加する
配列に要素を追加するには、append命令を使用します。挿入はinsert、削除はdelete命令を使用します。
書き方:append(元の配列, 追加する要素, ※axis)
※多次元配列に要素を追加する場合、行を追加するならaxis=0を、列を追加するならaxis=1を指定します。省略すると行の追加になります。
x = np.array([1, 2, 3]) print(x) y = np.append(x, [4, 5, 6]) print(y)
実行結果は以下のようになります。
配列の次元を変換する
1次元配列を2次元配列にするなど、配列の次元を変換するにはreshape命令を使用します。要素数に-1を指定すると、他の次元の要素数から計算して自動設定します。
書き方:reshape(1次元目の要素数, 2次元目の要素数,…)
x = np.array([1, 2, 3, 4, 5, 6]) print(x) y = x.reshape(2, -1) print(y)
実行結果は以下のようになります。
配列の要素にアクセスする
NumPy配列には、Pythonのリストと同じように、インデックス番号でアクセスできます。
書き方:[開始:終了:間隔]
x = np.array(range(1, 10)) print(x) print(x[1::2])
rangeは、範囲内のリストを作成する関数です。
実行結果は以下のようになります。
間隔にマイナスを指定すると最後の要素から順に取り出されます。
x = np.array(range(1, 10)) print(x) print(x[::-2])
実行結果は以下のようになります。
Pythonのリストと同じように、条件式で抽出することもできます。
x = np.array(range(1, 10)) print(x) print(x[x > 5])
実行結果は以下のようになります。
NumPyの便利な命令
最後に、NumPyの便利な命令について、いくつかご紹介します。
等間隔な数列を生成する
等間隔な数列を生成するには、linspace命令を使用します。
書き方:np.linspace(開始, 終了, num=数列数)
np.linspace(0, 10, num=101)
実行結果は以下のようになります。
乱数を生成する
乱数を生成するには、random.rand命令、またはrandom.randn命令を使用します。randは一様乱数を、randnは標準正規分布乱数を生成します。
書き方:random.rand(要素数, 次元数)
np.random.rand(10, 1)
実行結果は以下のようになります。
配列の要素を混ぜる
配列の要素を混ぜるには、shuffle命令を使用します。
書き方:shuffle(配列)
x = np.array(range(1, 10)) np.random.shuffle(x) print(x)
実行結果は以下のようになります。
配列を並び替える
逆に配列の要素を並び替えるには、sort命令を使用します。
書き方:sort(配列)
x = np.array(range(1, 10)) np.random.shuffle(x) print(x) y = np.sort(x) print(y)
実行結果は以下のようになります。
では、降順にソートするにはどうしたら良いでしょう? sort命令には降順にソートするオプションが無いため、ソートした結果を後ろから順に取り出すことで実現できます。
x = np.array(range(1, 10)) np.random.shuffle(x) print(x) y = np.sort(x)[::-1] print(y)
実行結果は以下のようになります。
配列どうしを結合する
配列どうしを結合するにはvstack命令を使用します。
書き方:vstack((配列1, 配列2, …))
x = np.array([1, 2, 3]) y = np.array([4, 5, 6]) z = np.vstack((x, y)) print(z)
実行結果は以下のようになります。

NumPyについて、理解は深まったかな?

概要やプログラムの書き方など、勉強になりましたー!

分かりました。ありがとうございました!
今回は、Pythonの数値計算ライブラリのNumPyについて解説しました。
これからNumPyを勉強したい、機械学習を使って何か作ってみたいという方は最初に理解しておきたい内容でしょう。
また、オンラインのプログラミングスクールTechAcademyでは、AIオンライン講座を開催しています。
AI(人工知能)の構築に必要な機械学習・ディープラーニングについて実践的に学習することができます。
現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間で習得することが可能です。
この記事を監修してくれた方
太田和樹(おおたかずき) 普段は主に、Web系アプリケーション開発のプロジェクトマネージャーとプログラミング講師を行っている。守備範囲はフロントエンド、モバイル、サーバサイド、データサイエンティストと幅広い。その幅広い知見を生かして、複数の領域を組み合わせた新しい提案をするのが得意。 開発実績:画像認識技術を活用した駐車場混雑状況把握(実証実験)、音声認識を活用したヘルプデスク支援システム、Pepperを遠隔操作するアプリの開発、大規模基幹系システムの開発・導入マネジメント 地方在住。仕事のほとんどをリモートオフィスで行う。通勤で消耗する代わりに趣味のDIYや家庭菜園、家族との時間を楽しんでいる。 |