ホーム >  Python > pydata >  【科学計算】機械学習に便利なNumPyの基本!その1【Python】

投稿日:   |  最終更新日:

【科学計算】機械学習に便利なNumPyの基本!その1【Python】

pydataPython数学

PythonライブラリのNumpyについて紹介します。

Numpyはどんなライブラリ?

Numpy(なんぱい)は、高度な数値計算ができるライブラリです。高次元の配列をPythonから使えるようになります。機械学習、AIの分野で必須になります。

数学に強い

Pythonで、行列やベクトルを使った計算に使われます。行列ベクトルの加算・減算・内積・外積といった基本的な計算や、逆行列・連立1次法式の求解機能があります。また、行列計算に優れているため、機械学習の画像処理には頻繁にしようされます。

準備

①VSCodeをインストールします。

MacOSでVisual Studio Codeをインストール

②VSCodeにPython実行環境を作ります。

【MacOS】PythonをインストールしてVSCodeの実行環境をつくる【Python】

③Anacondaをインストールします。

【MacOS】Anaconda3をインストールする【Python3】

④MacPCにインストールしたVSCODEからAnaconda3を利用できる状態にします。

【MacOS】Visual Studio Code(VSCode)にAnacondaの仮想環境を指定【MacOS】

環境

PC MacBook Air (Retina, 13-inch, 2019)
CPU 1.6 GHz デュアルコアIntel Core i5
メモリ 16 GB 2133 MHz LPDDR3
OS Catalina 10.15.7
Visual Studio Code 1.50.0
Conda 4.9.2
matplotlib 3.4.2
numpy 1.20.3


インストール・インポート方法

pipコマンドでインストールします。

pip instarll numpy

以下のようにImportします。

import numpy as np

Numpy配列

Numpy配列は数値を扱うことに最適化されている配列です。ただし、同じ型のオブジェクトしか格納できません。その代わり、list関数で作ったリストよりも速いです。数値意外にも、ブール型、ユニーク文字列、Pythonオブジェクト型も扱えます。

Numpyで1次元配列を作る

ndarray(エヌディアレイ)配列を使います。Pytonにはもともとlistなどの配列機能がありますが、これらと動きが違います。

import numpy as np
x = np.array([13,16,19])

xがndarrayオブジェクトとなります。

ndarrayの特徴

  • 同じ型を持つ要素しか格納することができない
  • 各次元ごとの(2次元なら列ごとや行ごと)の要素数は必ず一定
  • C言語を元に、最適化された行列演算を行うため効率的な処理をすることができる

Listとの違い

Listで掛け算をすると、以下のような結果になります。配列が単純に同じ値のまま2倍になります。

y = [13,16,19]
y_2 = y * 2

#[13,16,19,13,16,19]

ところが、ndarrayに同じ計算をすると、以下のように配列のそれぞれの値に掛け算を行います。

import numpy as np
x = np.array([13,16,19])
x_2 = x * 2

#[26,32,38]

mapを使用すれば、上記と同じことができますが、ndarrayの優れた部分は、配列同士で演算や行列計算ができることです。

行列計算

行列は、高校の数Cで学ぶ人がほとんどだと思います。ndarryaの優れているところは、配列内の大量の数値を高スピードで計算できることです。「x_2 = x * 2」は、行列の定数倍の計算結果と同じになります。

import numpy as np
x = np.array([13,16,19])
x_2 = x * 2

#[26,32,38]

ndarryaは多次元配列も扱える

以下のようにnp.arrayに多次元配列を指定すれば、多次元配列を扱うことができるようになります。

import numpy as np
x = np.array(多次元リスト)

例文

以下のように指定した場合、[10,14,15]と[20,24,26]が行となります。10,20と14,24と15,26が列となります。

import numpy as np
x = np.array(
[[10,14,15],
 [20,24,26]]
)

3次元配列

以下のように指定した場合、3次元配列となります。

import numpy as np
x_3 = np.array(
[[[10,11],[13,14],[15,16]]
 [[20,21],[23,24],[26,27]]]
)

カラー画像がまさに3次元配列です。

配列の操作

ndimで配列の次元を調べる

ndimを使用すると、配列の次元を調べることができます。

import numpy as np

x_1 = np.array([1,2,3])

x_2 = np.array(
[[10,12,13],
[20,21,23]]
)

x_3 = np.array(
[[[10,11],[13,14],[15,16]]
 [[20,21],[23,24],[26,27]]]
)

print(x_1.ndim)
>>1
print(x_2.ndim)
>>2
print(x_3.ndim)
>>3

shapeで各次元のサイズを調べる

Numpy配列が大きくなると配列オブジェクトを数えて形状を把握することが困難です。Shape関数を使うと配列のオブジェクトを行列でカウントできます。

import numpy as np

x_1 = np.array([1,2,3])

x_2 = np.array(
[[10,12,13],
[20,21,23]]
)

x_3 = np.array(
[[[10,11],[13,14],[15,16]]
 [[20,21],[23,24],[26,27]]]
)

print(x_1.shape)
>>(3,)
print(x_2.shape)
>>(3,2)
print(x_3.shape)
>>(2,3,2)
  • x_1は、1次元で3つの要素があるので(3,)
  • x_2は、2次元で行の数が2で列の数が3なので(2,3,)
  • x_3は、3次元で外側から2つの要素・その中に3つの要素、さらにその中に2つの要素なので(2,3,2)


次回

工事中。


トラックバック用のURL
プロフィール

名前:イワサキ ユウタ 職業:システムエンジニア、ウェブマスター、フロントエンドエンジニア 誕生:1986年生まれ 出身:静岡県 特技:ウッドベース 略歴 20

最近の投稿
人気記事
カテゴリー
広告