Numpy

numpyの使い方【15分で使えるようになる】

numpyの使い方【15分で使えるようになる】

 

 

  • numpyの機能が多すぎて混乱、重要なものを体系的に学びたい…
  • 重要なnumpyの文法を押さえたい

この悩みを解決します。

いまや『numpy』はPythonで数値計算・機械学習を行う際には必要不可欠なツールです。

確かに始めの頃は私も機能が多くて混乱していました。

本記事では、numpyの重要な文法・使えると便利な文法を整理し解説していきます。

記事を読み終えると、numpyをある程度自由自在に使えるようになります。

Numpyの基本知識

 

Numpyは、科学や数学のための数値計算ライブラリです。

Numpyを利用することで、データ解析で必要不可欠な行列の計算を高速で行うことができます。

下記をターミナルに入力することで『Numpy』をインストールすることができます。

$ pip3 install numpy

 

*Google Colabを使用している方は、デフォルでインストールされているので特にインストールする必要はありません。

Google Colabの導入方法に関しては下記を参考にしてください。

【10分で完了】Google Colabのインストール法・使い方Google Colabは、GPUを使用できるため、低コストかつ高速で機械学習の実装を行う際に必要不可欠なツールです。本記事では、Google Colabのインストール方法と注意事項を10〜15分程度でまとめました。...

 

Numpyのインポート

 

以下のコードをNotebook上で実行すると、Numpyをインポートできます。

import numpy as np

 

このようにインポートすることで、『np』でNumpyを呼び出すことができます。

この『np』という名付け方は慣習です。

 

Numpyの配列の生成方法

本章では、Numpy配列を生成するさまざまな方法を紹介していきます。

また、Numpyの配列のことを『ndarray』と呼びます。

  1. array : ndarray配列
  2. arange : 値が等間隔に変化する配列
  3. linspace : 与えた範囲を等間隔に分割した配列

詳しく説明していきます。

array : ndarray配列を生成

 

リストをarray関数に渡すことで、numpyが提供する『ndarray』配列を生成することができます。

<Input>

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

 

<output>

array([1, 2, 3])

 

2次元以上のリストをarray関数に渡すことで2次元以上の配列を作成することができます。

<Input>

np.array([[1, 2, 3], [4, 5, 6]])

 

<output>

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

 

asarryを使ってもndarray配列を作ることができます。

<Input>

lis1 = [1, 2, 3]
array1 = np.asarray(lis1)
array1

 

<output>

array([1, 2, 3])

 

arrayとasarrayの違いは値が同期されるかされないかの違いです。

  1. array : 値は同期されない
  2. asarray : 値が同期される

 

少し応用なので、初心者の方は、array, asarrayも同じようなものだと思って飛ばしてください。

詳しく知りたい方のために、具体的をコードで紹介します。

<Input>

# コピーになる
lis1 = [1, 2, 3]
array1 = np.array(lis1)
array2 = np.array(array1)
array2[0] = 100
print(f'Case Array  {array1} : {array2}')

# 同期される
lis3 = [1, 2, 3]
array3 = np.asarray(lis3)
array4 = np.asarray(array3)
array4[0] = 100
print(f'Case Asarray  {array3}:{array4}')

 

<Output>

Case Array  [1 2 3] : [100   2   3]
Case Asarray  [100   2   3]:[100   2   3]

 

arange : 値が等間隔に変化する配列

 

arange関数は、引数として(start, stop, step)という形式で引数を与えることで配列を生成します。

<Input>

np.arange(4, 20, 2)

 

<Output>

array([ 4,  6,  8, 10, 12, 14, 16, 18])

 

*startの値は含むが、stopの値は含まないことに注意しましょう。

 

Stepの部分に『-1』を指定することで、降順で配列を生成できます。

 

linspace : 与えた範囲を等間隔に分割した配列

 

linspace関数を用いることで、等間隔な配列を作ることができます。

引数としては、(start, stop, 要素数)を指定することができます。

<Input>

np.linspace(0, 1, 5)

 

<Output>

array([0.  , 0.25, 0.5 , 0.75, 1.  ])

 

*arangeのときと異なり、デフォルでstopの値を含みます!

 

引数に『endpoint = False』とすることでstopの値を含まなくすることができます。

<Input>

np.linspace(0, 1, 5, endpoint = False)

 

<Output>

array([0. , 0.2, 0.4, 0.6, 0.8])

 

ones : 要素が1の配列を生成

 

onesを用いることで、要素が1の配列を生成することができます。

<Input>

ones = np.ones((2, 2))
ones

 

<Output>

array([[1., 1.],
       [1., 1.]])

 

zeros : 要素が0の配列を生成

 

zerosで要素が0の配列を生成することができます。

<Input>

zeros = np.zeros((3, 4))
zeros

 

<Output>

array([[0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.]])

 

要素が0の配列を生成するタイミングは結構頻繁にあります。

 

eye : 単位行列を生成

 

eyeを用いることで、単位行列を生成することができます。

np.eye(5)

 

<出力>

array([[1., 0., 0., 0., 0.],
       [0., 1., 0., 0., 0.],
       [0., 0., 1., 0., 0.],
       [0., 0., 0., 1., 0.],
       [0., 0., 0., 0., 1.]])

 

Numpyによる乱数生成

 

本章では、Numpyによる乱数生成方法を説明していきます。

 

random.seed : 乱数のシードを固定

 

乱数のシードを固定することで、乱数の再現性を担保することができます。

機械学習やデータ解析等では、再現性を担保することは大切なので最初に設定しておくことをオススメします。

具体的には、下記のコードで設定できます。

# 乱数のシードを固定
np.random.seed(1)

 

引数を他の数字にすることで、乱数のシードは変化します。

特に気にせず適当に数字を入力しましょう。

 

random.rand : 0〜1の一様分布から乱数生成

 

random.randをクラスを使用することで一様乱数を生成することができます。

下記のコードで0〜1の一様乱数を生成できます。

<Input>

np.random.rand()

 

<Output>

0.4728617697542056

 

下記のコードで多次元の一様乱数を生成することができます。

<Input>

np.random.rand(5, 5)

 

<Output>

array([[0.58949042, 0.2016367 , 0.6536451 , 0.96601509, 0.78657448],
       [0.20699415, 0.38918657, 0.64385908, 0.21698741, 0.28100744],
       [0.80928114, 0.15305058, 0.65002492, 0.86956368, 0.82423989],
       [0.54919992, 0.93332536, 0.59593206, 0.99904918, 0.99065101],
       [0.31950689, 0.67079156, 0.42423613, 0.64338711, 0.14761924]])

 

random.randn : 標準正規分布から乱数生成

 

random.randnを使用することで、平均0分散1の標準正規分布から乱数を生成することができます。

下記のコードで乱数を生成できます。

<Input>

np.random.randn()

 

<Output>

1.6243453636632417

 

多次元配列の乱数も下記のコードで生成できます。

<Input>

np.random.randn(5, 5)

 

<Output>

array([[-0.61175641, -0.52817175, -1.07296862,  0.86540763, -2.3015387 ],
       [ 1.74481176, -0.7612069 ,  0.3190391 , -0.24937038,  1.46210794],
       [-2.06014071, -0.3224172 , -0.38405435,  1.13376944, -1.09989127],
       [-0.17242821, -0.87785842,  0.04221375,  0.58281521, -1.10061918],
       [ 1.14472371,  0.90159072,  0.50249434,  0.90085595, -0.68372786]])

 

次章からは、どのように生成した配列の要素を取り出すのかを説明していきます。

 

numpy配列のインデキシング・スライシング

 

本章では、Numpyのインデキシングとスライシングについて解説していきます。

まずは、インデキシングについて解説していきます。

具体的に以下のサンプル配列を使って説明していきます。

# sample
array1 = np.array([[1, 2, 3], [4, 5, 6]])

 

numpyのインデキシング

 

インデキシングとは、配列のインデックスを指定して対応する要素を取り出す方法です。

実際にインデックスを指定して要素を取り出してみましょう。

まずは、各行を取り出す方法を下記のコードに示します。

<Input>

# 1行目を取り出す
array1[0]

 

<Output>

array([1, 2, 3])

 

 

下記のコードで2次元配列の要素を取り出すことができます。

<Input>

# 1行2列目を取り出す
array1[0, 1]

 

<Output>

2

 

スライシングを使って配列を取り出す

 

『:』を使用し取り出す配列を指定する方法をスライシングといいます。

スライシングを使用することで、[a : b]と指定することで、『a以上b未満の配列』を取り出すことができます。

さらに以下のような機能もよく使用します。

  • aを指定しない場合は、先頭の配列がaに設定される
  • bを指定しない場合は、最後の配列がbに設定される

 

<Input>

# 1行目の2列目3列目を取り出す
array1[0, 1:]

 

<Output>

array([2, 3])

 

スライシングを使用することで各列を取り出すことができます。

<Input>

# 1列目を取り出す
array1[:, 0]

 

<Output>

array([1, 4])

 

*1列を取り出すと、1次元のndarray配列になることに注意しましょう。

2次元以上の多次元配列でもインデキシングとスライシングの方法は変わりません。

 

numpyでよく使うメソッド

 

ここからは、numpyでよく使用する基本的なメソッドを紹介していきます。

  1. shape : 形状を確認
  2. reshape : 形状を変換
  3. dtype : データの型を確認
  4. astype : データの型を変更

 

shape : 形状を確認

 

shapeで形状を確認することができます。

array1 = np.array([[1, 2, 3],
                   [4, 5, 6]])

# 配列の確認
array1.shape

 

<出力>

(2, 3)

 

こうすることで、2行3列の配列であることが確認できます。

reshape : 形状を変換

 

reshapeメソッドを用いて、形状を変換することができます。

具体的には、変更したい配列をReshapeの引数で指定してください

array1 = np.array([[1, 2, 3],
                   [4, 5, 6]])

# 配列の変更(変更したい配列をReshapeの後に指定)
print(array1.reshape(3, 2))

 

<出力>

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

以下のように、reshapeの引数に-1を入力することで、片方の配列をオートで決定してくれます。

array1 = np.array([[1, 2, 3],
                   [4, 5, 6]])

# 配列の変更(-1を使用する)
array1.reshape(1, -1)

 

<出力>

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

 

dtype : データの型を確認

 

dtypeを利用することで、データの型を確認することができます。

array1 = np.array([[1, 2, 3],
                   [4, 5, 6]])

# データの型を確認
array1.dtype

 

<出力>

dtype('int64')

 

astype : データの型を変更

 

astypeメソッドを利用することで、データの型を変更することができます。

以下の具体例では、『np.float64』から『np.int32』に変更しています。

<Input>

array1 = np.array([1.0, 1.1, 1.2])
print(f'変更前 : {array1}')

array2 = array1.astype(np.int32)
print(f'変更後 : {array2}')

 

<output>

変更前 : [1.  1.1 1.2]
変更後 : [1 1 1]

 

 

numpyでよく使う関数

 

numpyでよく使う基本的な関数を紹介していきます。

  1. where : 条件によって要素を変換

詳しく説明していきます。

where : 条件によって要素を変換

 

whereを利用することで、条件によって要素を変換することができます。

where関数の引数は、(条件, Trueのとき変換する値, Falseのとき変換する値)です。

array1 = np.array([[1, 2, 3],
                   [4, 5, 6]])

# 条件によって要素を変換
array2 = np.where(array1 > 3, 1, 0)
array2

 

<出力>

array([[0, 0, 0],
       [1, 1, 1]])

 

 

まとめ

 

numpyの基本的な使い方を紹介しました。

numpyを利用することで、機械学習や数式のプロットなどいろいろなことができるようになります。

さらに、numpyを利用することで、Pandas、Matplotlibというよう解析ツールも自由に使いこなすことが可能です。

 

ABOUT ME
努力のガリレオ
【運営者】 : 東大で理論物理を研究中(経歴)東京大学, TOEIC950点, NASA留学, カナダ滞在経験有り, 最優秀塾講師賞, オンライン英会話講師試験合格, ブログと独自コンテンツで収益6桁達成 【編集者】: イングリッシュアドバイザーとして勤務中(経歴)中学校教諭一種免許取得[英語],カナダ留学経験あり, TOEIC650点
【必見】オンライン英会話を利用しないのは時代遅れ?

 

 

英語学習でオンライン英会話を利用しないのは、時代遅れです…

 

『スピーキングができないから、オンライン英会話はまだまだ後回し…』と思っている方は大間違いです。

 

最近のオンライン英会話は、教材が豊富で、もはや参考書・問題集は不要になりつつあります…

また、多くのオンライン英会話が最新メソッドを導入して、スピーキングのみならず、リーディング・リスニング・ライティングの能力も上がる教材を導入しています。

さらに、効率的な記憶ツールや学習カウンセリングのサービスが提供されることもあります!!

 

特に初心者の方は、下記の記事で紹介しているオンライン英会話をチェックしてみてください。

 

【東大生が厳選】初心者にオススメなオンライン英会話10選実は、最適なオンライン英会話はユーザーによって異なります。本記事では、複数のオンライン英会話を経験した私が、他社と比較しつつ特徴を明確にして本当にオススメできるオンライン英会話を10個厳選しました。...

 

中には、2週間の無料体験期間を提供しているオンライン英会話もあります。

英語学習が滞っている方や英語学習を習慣化できていない方は無料体験期間で良いので挑戦してみてください。

何事も行動することが大切です。

 

また、多くのオンライン英会話がTOEICやTOEFL等の外部英語試験の対策レッスンを提供してきています。

中には、追加料金なしで、本番さながらの対策や面接対策を行うことができるオンライン英会話もあります。

 

特にTOEIC対策に強いオンライン英会話は下記を参考にしてください。

 

【徹底比較】TOEIC対策に強いオンライン英会話5選|東大生が厳選!オンライン英会話はTOEICのスコアを効率的に上げる最強のツールです。本記事では、TOEICにオンライン英会話が効果的な理由とTOEIC対策に強いオンライン英会話を厳選しました。詳しい内容は記事を参考にしてください。...

 

TOEFL対策に強いオンライン英会話に関しては下記を参考にしてください。

 

【徹底比較】TOEFL対策に強いオンライン英会話5選|東大生が厳選!TOEFL対策にオンライン英会話は有効です。事実、私もTOEFL対策のためにオンライン英会話を使用してTOEFL ibtの4技能、TOEFL itpのスコアを爆上げすることができました。この記事では、私が思うTOEFL対策に最適なオンライン英会話を紹介しました。...