数値計算を行ってみる!PythonのライブラリNumPyの使い方【初心者向け】

初心者向けにPythonで数値計算を行う上で便利なNumPyの使い方について詳しく解説しています。多次元配列の処理などを効率的に行うことができます。実際にいくつかの例を用いて書き方を説明しているので、ぜひ参考にしてみてください。

TechAcademyマガジンは受講者数No.1のオンラインプログラミングスクールTechAcademy [テックアカデミー]が運営。初心者向けに解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。

今回は、Pythonの数値計算ライブラリであるNumPyについてテックアカデミーのメンターが初心者向けに解説します。

NumPyを使うと、ベクトルや行列など、機械学習で必要となる形式のデータを簡単に扱うことができます。

Pythonで機械学習を行うための必須のライブラリなので、記事を参考にNumPyの使い方を覚えましょう。

 

目次

 

NumPyとは

NumPyは、Pythonで数値計算を効率的に行うためのライブラリです。

NumPyはオープンソースで公開されており、個人/商用問わず、誰でも無料で利用できます。

NumPyを使うと、ベクトルや行列などの多次元配列の処理を容易に行えます。

またPythonだけで数値計算を行うのと比較して、非常に高速に処理を行えます。
(NumPyの内部はC、及びFortranというプログラム言語で実装されています)。

機械学習は、多次元配列に対して演算を行いながらモデルを学習していきます。

演算処理が効率的に行えるため、PythonのNumpyは機械学習について必須のライブラリです。

 

大石ゆかり

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

田島悠介

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

大石ゆかり

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

田島悠介

例を見ながら説明していくね!

 

[PR]機械学習で挫折しない学習方法を動画で公開中

NumPyを利用するには

NumPyを利用するには、Anacondaなどの開発環境のパッケージを使うのが簡単です。

Anacondaは、データ分析やグラフ描画など、Pythonでよく利用されるライブラリを含んだ開発環境です。

ここではPythonによる機械学習の開発環境を整えるため、Anacondaを利用します。

AnacondaにNumPyをインストールするには、メニュー画面のEnvironmentsから、Not Installedを選択し、検索BOXに「NumPy」と入力します。

 

一覧にNumPyが表示されますので、チェックボックスで選択し、画面右下のApplyボタンを押すことでインストールできます。

以降は、Jupyter Notebookをもとに、NumPyの使い方を説明します。

 

NumPyの使い方

NumPyを使う際は、初めにNumPyライブラリをインポートします。

サンプルコード

import numpy as np

 

解説

エラーがでなければ、正しくインポートされています。

 

NumPy配列を生成する

NumPyの配列はarray命令で作成します。

書き方:array(リスト、タプルなど)

 

リストについてはこちらの記事を参考にしてください。

リストは開発現場でも活用される重要な学習内容となるため、以下の記事を参考にすると理解が深まります。

Numpyを活用するためにリストの理解は必要不可欠です。

Pythonでlist(リスト)を検索する方法【初心者向け】現役エンジニアが解説 | TechAcademyマガジン

 

タプルについてはこちらの記事を参考にしてください。

タプルもデータを扱う際に活用されるため、以下の記事を参考にすると理解が深まります。

場面に合わせたデータの作成方法を理解することで、機械学習におけるデータ活用の幅が広がります。

Pythonにおけるtupleの利用方法を現役エンジニアが解説【初心者向け】 | TechAcademyマガジン

 

サンプルコード1

import numpy as np
tech=np.array([1, 2, 3])
print(tech)

 

実行結果1

 

解説1

1行目のimport numpy as np では、NumPyをnpという名前で利用できるようにしています。

2行目のtech=np.array([1, 2, 3])では、techオブジェクトにNumPyのarrayメソッドを利用して配列の値を代入しています。

代入する値は、[1, 2, 3]です。

 

3行目のprint(tech)ではtechオブジェクトを表示しています。

表示結果は[1, 2, 3]です。

 

サンプルコード2

import numpy as np
tech=np.array([[1, 2, 3], [4, 5, 6]])
print(tech)

実行結果2

 

解説2

1行目のimport numpy as np では、NumPyをnpという名前で利用できるようにしています。

2行目のtech=np.array([[1, 2, 3], [4, 5, 6]])では、techオブジェクトにNumPyのarrayメソッドを利用して多次元配列の値を代入しています。

代入する値は、[[1, 2, 3], [4, 5, 6]]です。

 

3行目のprint(tech)ではtechオブジェクトを表示しています。

表示結果は[[1, 2, 3], [4, 5, 6]]です。

 

配列の型を確認する

NumPyの配列は、要素の型を混在させることができません。

要素の型を確認するには、dtypeプロパティを使用します。

 

 

要素の型を確認する

サンプルコード

import numpy as np
x = np.array([1, 2, 3])
x.dtype

 

実行結果

解説

1行目のimport numpy as np では、NumPyをnpという名前で利用できるようにしています。

2行目のx=np.array([1, 2, 3])では、xオブジェクトにNumPyのarrayメソッドを利用して配列の値を代入しています。

代入する値は、[1, 2, 3]です。

 

3行目のx.dtypeではxオブジェクトの要素の型を表示しています。
表示結果はdtype(‘int64’)です。

これにより、NumPyのデータ型符号あり64ビット整数型であることがわかります。

つまり、-9,223,372,036,854,775,808 から 9,223,372,036,854,775,807の範囲内の整数という意味になります。

 

 

NumPyのデータ型について

NumPyのデータ型一覧に関しては、こちらの記事を参考にしてください。

Data types — NumPy v1.20 Manual

numpy.int8 -128 から 127の範囲にある、符号あり8ビット整数型
numpy.int16 -32,768 から 32,767の範囲にある、符号あり16ビット整数型
numpy.int32 -2,147,483,648 から 2,147,483,647の範囲にある、符号あり32ビット整数型
numpy.int64 -9,223,372,036,854,775,808 から 9,223,372,036,854,775,807の範囲にある、符号あり64ビット整数型
numpy.uint8 0 から 255の範囲にある、符号なし8ビット整数型
numpy.uint16 0 から 65,535の範囲にある、符号なし16ビット整数型
numpy.uint32 0 から 4,294,967,295の範囲にある、符号なし32ビット整数型
numpy.uint64 0 から 18,446,744,073,709,551,615の範囲にある、符号なし64ビット整数型
numpy.half
numpy.
float16
半精度浮動小数点型(符号部1ビット、指数部5ビット、仮数部10ビット)
numpy.float64
numpy.float_
倍精度浮動小数点型(符号部1ビット、指数部11ビット、仮数部52ビット)
numpy.complex64 実部・虚部がそれぞれfloat32の複素数
numpy.complex128
numpy.complex_
実部・虚部がそれぞれfloat64の複素数
numpy.bool_ bool型(True か Falseで表す)

 

配列の構造を確認する

ここでは、配列の構造を確認する方法について解説します。

 

1次元配列の要素数を確認する

1次元配列の要素数を確認する使用例を見ていきましょう。

 

サンプルコード

import numpy as np
techacademy = np.array([1, 2, 3])
techacademy.shape

実行結果

解説

配列の構造を調べるには、shapeプロパティを使用します。

3つの要素があったので表示結果は(3,)です。

(3,)という表示は見慣れないかもしれません。

Pythonのタプルで、一次元配列のshapeは(3,)のように表します。

もし、1次元配列を立てベクトルに置き換えた場合は、(3,1)という表示になります。

 

2次元配列の要素数を確認する

2次元配列の要素数を確認する使用例を見ていきましょう。

 

サンプルコード

import numpy as np
tech=np.array([[1,2,3],[4,5,6]])
tech.shape

実行結果

 

解説

2次元配列のデータは次のような構造になっています。

[1,2,3]

[4,5,6]

つまり、縦2列、横3行の構造ということです。

結果的に、(2, 3)と表示されます。

 

全体の要素数を確認

配列全体の要素数を確認する使用例を見ていきましょう。

 

サンプルコード

import numpy as np
techacademy=np.array([[1,2,3],[4,5,6]])
techacademy.size

実行結果

解説

sizeプロパティを利用して全体の要素数を確認します。

表示結果は6です。

 

 

配列に要素を追加する

配列に対して要素を追加する使用例を見ていきましょう。

 

サンプルコード

import numpy as np
x = np.array([1, 2, 3])
print(x)
y = np.append(x, [4, 5, 6])
print(y)

実行結果

 

基本文法

append(元の配列, 追加する要素, *axis)

 

解説

配列に要素を追加するには、append命令を使用します。

挿入はinsert、削除はdelete命令を使用します。

※多次元配列に要素を追加する場合、行を追加するならaxis=0を、列を追加するならaxis=1を指定します。省略すると行の追加になります。

 

 

配列の次元を変換する

配列要素の次元を変換する使用例を見ていきましょう。

 

サンプルコード

import numpy as np
x = np.array([1, 2, 3, 4, 5, 6])
print(x)
y = x.reshape(2, -1)
print(y)

実行結果

 

基本文法

reshape(1次元目の要素数, 2次元目の要素数,...)

 

解説

配列の次元を変換するにはreshape命令を使用します。

次元を変換するというのは、1次元配列を2次元配列にするような処理を意味します。

要素数に-1を指定すると、他の次元の要素数から計算して自動設定することが可能です。

 

 

配列の要素にアクセスする

配列の要素にアクセスする使用例を見ていきましょう。

 

サンプルコード

import numpy as np
x = np.array(range(1, 10))
print(x)
print(x[1::2])

 

実行結果

 

基本文法

[開始:終了:間隔]

 

解説

[開始:終了:間隔]という実装により、Pythonのリストと同様、インデックス番号にアクセスできます。

 

配列を作成する

NumPyで配列を作成する使用例を見ていきましょう。

 

サンプルコード

import numpy as np
x = np.array(range(1, 10))
print(x)
print(x[::-2])

実行結果

 

解説

rangeは、範囲内のリストを作成する関数です。

 

 

配列を抽出する

NumPyで配列を抽出する使用例を見ていきましょう。

 

サンプルコード

import numpy as np
x = np.array(range(1, 10))
print(x)
print(x[x > 5])

実行結果

解説

Pythonのリストと同じように、条件式で抽出することもできます。

表示結果の1行目と異なり、2行目ではxが5より大きいものだけを抽出しています。

結果的に6 7 8 9が抽出され、表示できています。

 

NumPyの便利な命令

最後に、NumPyの便利な命令について、いくつかご紹介します。

 

等間隔な数列を生成する

NumPyを利用して等間隔な数列を生成する使用例を見ていきましょう。

 

サンプルコード

import numpy as np
np.linspace(0, 10, num=101)

実行結果

 

基本文法

np.linspace(開始, 終了, num=数列数)

解説

等間隔な数列を生成するには、linspace命令を使用します。

 

乱数を生成する

NumPyを利用して乱数を生成する使用例を見ていきましょう。

 

サンプルコード

import numpy as np
np.random.rand(3,2)

実行結果

 

基本文法

random.rand(要素数, 次元数)

解説

乱数を生成するには、random.rand命令、またはrandom.randn命令を使用します。

randは一様乱数を、randnは標準正規分布乱数を生成します。

 

配列の要素を混ぜる

NumPyを利用して配列要素を混ぜる使用例を見ていきましょう。

 

サンプルコード

import numpy as np
x = np.array(range(1, 10))
np.random.shuffle(x)
print(x)

実行結果

基本文法

shuffle(配列)

解説

配列の要素を混ぜるには、shuffle命令を使用します。

 

配列を並び替える

NumPyを利用して配列を並び替える使用例を見ていきましょう。

 

サンプルコード

import numpy as np
x = np.array(range(1, 10))
np.random.shuffle(x)
print(x)
y = np.sort(x)
print(y)

実行結果

基本文法

sort(配列)

解説

配列の要素を逆順で並び替えるには、sort命令を使用します。

 

降順で並べ替える

NumPyを利用して降順で並び替える使用例を見ていきましょう。

 

サンプルコード

import numpy as np
x = np.array(range(1, 10))
np.random.shuffle(x)
print(x)
y = np.sort(x)[::-1]
print(y)

実行結果

 

解説

sort命令には降順にソートするオプションがないため、ソートした結果を後ろから順に取り出すことで実現できます。

降順というのは数字が大きい順番を意味します。

今回であれば9が一番大きいので9から順番に表示しています。

 

配列同士を結合する

NumPyを利用して配列同士を結合させる使用例を見ていきましょう。

 

サンプルコード

import numpy as np
x = np.array([1,2,3])
y = np.array([4,5,6])
z = np.vstack((x,y))
print(z)

実行結果

 

基本文法

((配列1, 配列2, ...))

解説

配列同士を結合するにはvstack命令を使用します。

 

今回は、Pythonの数値計算ライブラリのNumPyについて解説しました。

これからNumPyを勉強したい、機械学習を使って何か作ってみたいという方は最初に理解しておきたい内容でしょう。

 

執筆してくれたメンター

中本賢吾(なかもとけんご)
アジマッチ有限会社 代表取締役社長開発実績:PHPフレームワークによるフランチャイズ企業向け会員制SNS。Shopifyによる海外進出用大規模ネットショップ構築。Vue.jsによる金融機関向け内部アプリ。AWSやLinuxハウジングサーバでの環境構築。人工知能を利用した画像判別システム。小売チェーン店舗用スマホアプリ。WordPressによる不動産チェーン店向け賃貸・売買仲介システム。基幹システム移管用データコンバートシステム。小学生がオリジナルAndroidアプリをGoogle Playでリリース、NHK Whyプログラミング入賞、全国Programing Festival入賞、中学生がSNS型PWAアプリリリースなど、ボランティアプログラミング教育活動行っている。

 

田島悠介

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

大石ゆかり

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

田島悠介

サンプルプログラムをもとに、いろいろ試して学習を深めるといいよ!

深層学習画像認識自然言語処理については、また別のところで説明するね。

大石ゆかり

分かりました。ありがとうございました!

 

また、オンラインのプログラミングスクールテックアカデミーでは、AIオンライン講座を開催しています。

AI(人工知能)の構築に必要な機械学習・ディープラーニングについて実践的に学習することができます。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間で習得することが可能です。