1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

python 機械学習 #2 NumPy

Last updated at Posted at 2019-10-22

NumPyとは

NumPyとはPythonで科学技術計算をする際のツールの一つであって高度な計算などをしたい時によく使われます。例えば、多次元配列機能や線形代数などに使われます。またPythonの計算は他のプログラミング言語よりも計算が遅いので計算処理を早くしたい時に使います。

NumPyとPythonの計算処理の時間の違い

# NumPyをnpとしてインポート
import numpy as np
# pythonのtime
import time 
# aに標準正規乱数100000個を格納する
a = np.random.randn(100000)
# スタートの時間
start = time.time()
# npでaの和を求めるのを1000回繰り返す
for _ in range(1000):
    sum_a = np.sum(a)
end = time.time()
print("Using NumPy", end-start)
b = list(a)
start = time.time()
# pythonでaの和を求めるのを1000回繰り返す
for _ in range(1000):
    sum_b = sum(b)
end = time.time()
print("Python", end-start)

実行結果

Using NumPy 0.0279238224029541
Python 4.164802074432373

これを見てくれればわかるようにものすごい計算速度が違うことがわかります。このようにNumPyは高度な難しい計算をするだけでなく計算速度も早くなります。

NumPyを使ってみる

numpyをインポート

import numpy as np

numpyで配列を作成する

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

で作成できる。ここで注意して欲しいのはあくまでNumPyの配列であるということだ。ですのでPythonのコードで計算等をしたい時は一度list()を使ってリスト化する必要があるので注意してください(通常は numpy で押し通せばよいだけです)

arangeでの配列の作成

np.arange(10)
# 実行結果
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])

arangeはpythonでいうrangeみたいなものである。またこれを2つ間隔を開けたいな!(2つとばし)などと思ったらnp.arange(0, 10, 2)でできます。

linspace

linspaceはある決まった範囲での数字の配列をある数で分ける時に使う。要は等差数列をすると考えてください。

np.linspace(start, end)

詳しく説明していくとこれはstartに記した値からendで示した値までの範囲をある決まった範囲でうまく等しく足されるようにやっていくものです。デフォルトだと50またぎで分割されていきます。
例えば、、、

np.linspace(0, 10)
# 実行結果
array([  0.        ,   0.20408163,   0.40816327, 0.6122449 ,
         0.81632653,   1.02040816,   1.2244898 ,   1.42857143,
         1.63265306,   1.83673469,   2.04081633,   2.24489796,
         2.44897959,   2.65306122,   2.85714286,   3.06122449,
         3.26530612,   3.46938776,   3.67346939,   3.87755102,
         4.08163265,   4.28571429,   4.48979592,   4.69387755,
         4.89795918,   5.10204082,   5.30612245,   5.51020408,
         5.71428571,   5.91836735,   6.12244898,   6.32653061,
         6.53061224,   6.73469388,   6.93877551,   7.14285714,
         7.34693878,   7.55102041,   7.75510204,   7.95918367,
         8.16326531,   8.36734694,   8.57142857,   8.7755102 ,
         8.97959184,   9.18367347,   9.3877551 ,   9.59183673,
         9.79591837,  10.        ])

詳しく説明していくと、最初は0と0.20408163ですよね?これと同じ数をどんどん足していくような感じです。ですが100%うまく分けられるわけではないので多少の誤差が生まれます。では先ほどのものを3つほどやっていきます。

0 + 0.20408163
0.20408163 + 0.20408163
0.40816326ちょっと誤差あり + 0.20408163
0.6122449

このようにうまく分割仕組みになっていきます。ではこの50個要素を作るというのを変更していくのはどうしていくのかというとnp.linspace(0, 10, 10)とやるとうまく10等分されるようにできます。

numpyの四則演算

# 足し算
a + 2
# 実行結果
array([3, 4, 5])
# 引き算
a - 1
# 実行結果
array([0, 1, 2])
# 掛け算
a * 2
# 実行結果
array([2, 4, 6])
# 割り算
a / 2
# 実行結果
array([0.5, 1, 1.5])

shapeを使う

shapeを使うと配列の中身がどうなっているのかをわかるようになります。例をあげると

b = np.array([[1, 2, 3], [4, 5, 6]])
b.shape
# 実行結果
(2, 3)

詳しく説明していきます。[1, 2, 3]をnumber_1として[4, 5, 6]をnumber_2とすると

b = np.array([number_1], [number_2])

というふうになる。これは2つの配列があるようになりますよね?ですから2となる。そして配列の中には3つの要素がありますよね?そうなるので

b.shape
(2, 3)

というふうになる。

sum

これは要素全てを足しすということです。

np.sum(a)
6

というようになる。またこれには引数axisというものがある。これは軸を指定するという意味である。axisはデフォルトが0であるためsumの場合全てが足されます。axisが0いわば横にどんどん広がっていくような感じになっていきます。(参照:https://deepage.net/features/numpy-axis.html)

numpy-shape-2d.jpg

このようになるので一回横まで足したら処理が終わるので、この場合は

c = np.array([[0, 1], [2, 3], [4, 5]])
np.sum(c, axis=1)
# 実行結果
array([1, 5, 9])

というようになります。

reshape

これはshapeの置き換えバージョンだと思ってください。例えば

b = np.array([[1, 2, 3], [4, 5, 6]])
b.shape
# 実行結果
(2, 3)
# これをshape(3, 2)にしたい時
b.reshape(3, 2)
# 実行結果
array([[1, 2], [3, 4], [5, 6]])

という風に簡単に行数と列数を変更することができる。

transpose

これは実行して考えてみよう

a = np.arange(12).reshape(3,4)
a
# 実行結果
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
a.transpose()
# 実行結果
array([[ 0,  4,  8],
       [ 1,  5,  9],
       [ 2,  6, 10],
       [ 3,  7, 11]])

このように行と列を入れ替えた配列を作る。

間違えているところがありましたらおしらせください!!

最後まで閲覧してくださりありがとうございました!
これからについて
自分は今高校二年生です。ですので受験を意識した勉強をしなくてはいけないので毎週月曜日に更新していきたいと思います。

参考になったサイト、本

Website: https://deepage.net/features/numpy/
本: Pythonで始める機械学習

1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?