見出し画像

機械学習完全に理解した(い)~Pythonメモ1.0~

始めに

numpyやスライス、テンソルの基本について調べました。

最近はAIだの機械学習だのが流行っていますね。僕自身将来、SAOのようにVR空間でNPCが人と遜色ないレベルで動かせることを夢見ていますし、僕の学部ではAI・機械学習についても勉強するのでその予習としても始めて見ました。完全に自分用のメモ帳ですが、他人が読んでもわかりやすいようには気を付けてはいます。(未来の自分はほぼ他人なので)最も基本的な文法等は他のプログラミング言語とほとんど変わらないのでさっさと終わらせて、numpyとやらがやけに出てくるので調べてみました。それに伴って出てきたわからない単語も調べました。

numpyについて

Pythonで学術計算を行うためのライブラリ

import numpy as np

でnpとして呼び出す。(npとするのが慣習の模様)

numpyの基本的な関数

・四則計算

np.add(10,100)     #結果は110
np.subtract(10,100)  #-90
np.multiply(10,100)  #1000
np.divide(100,10)     #10

・三角関数

np.sin(0) #0.0
np.cos(0)  #1.0
np.tan(0)  #0.0

・累乗、平方根

np.power(2,5) #2の5乗を表す。32
np.sqrt(2)     #2の平方根を表す。1.41421356

・ソート関数

x = np.random.randint(0, 10, size=10)  #1~10の整数を10個並べる
print(x)
print(np.sort(x))  #sort関数で昇順に並べ替える

反対に降順にしたい場合はスライスというPythonの機能を使う

x = np.random.randint(0, 10, size=10)
print(x)
print(np.sort(x)[::-1])   #[;;-1]がキー。後述

*スライスについて
シーケンスの要素について部分的に簡単にアクセスできる。

[始まりの位置 : 終わりの位置]のように使い、配列から取り出す要素を指定。

a = [1, 2, 3, 4, 5]  #aの配列を準備
print(a[0: 4])        #配列0~4をprint
print(a[: 4])         #始まりの位置が空白の場合は0と処理される。
print(a[-3:])         #終わり位置が空白の場合は配列末尾の位置と処理される。
print(a[2: -1])       # - は配列1要素を左に進む

>>>
[1, 2, 3, 4]
[1, 2, 3, 4]
[3, 4, 5]
[3, 4]

例のごとく、配列の要素に割り振られた番号に注意。(下参考図)

・numpyの配列

ndarrayというnumpyで使われる配列がある模様。ndarrayは多次元配列を扱うためのクラス。1次元でベクトル、2次元で行列、3次元以上でテンソルを扱える。
ここで自分はテンソル?となったのですが、沼が深かったので早々に切り上げる。簡単な説明を後ろに載せてます。

<ベクトル>

vec1 = np.array([1,2,3]) #(1,2,3)のベクトル
print(vec1)

>>>
[1,2,3]

<行列>

vec2 = np.array([[1,2,3],[4,5,6]])  #(2,3)型の行列 [[],[]]の形に注意。
print(vec2)
>>>
[1 2 3]
[4 5 6]

<行列の計算>

足し算

vecx = np.array([[1,2,3],[4,5,6]])
vecy = np.array([[4,5,6],[7,8,9]])

vecx + vecy

>>>
array([[ 5,  7,  9],
       [11, 13, 15]])

引き算

vecx - vecy

>>>
array([[-3, -3, -3],
       [-3, -3, -3]])

かけ算

足し算、引き算とは異なりnp.dot()関数を使う。

vecx = np.array([[1,2,3],[4,5,6]])
vecz = np.array([[1,2,3],[4,5,6],[7,8,9]])

res = np.dot(vecx,vecz)
print(res)

>>>
[[30 36 42]
 [66 81 96]]

*テンソルについて

自分は現在大学1回生で線形代数については勉強しているのですが、いまだテンソルという言葉は登場していないので、軽く調べました。どうやら、様々な立場からのとらえ方があるようですが、とりあえず数学的な雰囲気はこちらのブログでつかめる。根気よく読もう。

大学で学んだことやこれから学ぶところがこういう形で出てくるとワクワクしますね!

めちゃくちゃかみ砕いて書くと、テンソルはベクトルや行列の仲間で、それらを高次元に拡張したもの。複数のベクトル空間からテンソル積という操作により新たに生み出されたベクトル空間の元がテンソルだそうです。
いや、それ何に使うの?って感じですがそうと遠くない未来に相まみえる気がしています(笑)

終わり

本当はnp.arrayについてさらに掘り下げたり、np.arangeについても調べたかったのですが、長くなりそうなので一旦切ります。
今までプログラミング言語はUnityで実現したいことのためにしか使っていませんでしたが、また違った楽しみがあっていいですね。Unityと機械学習、いつかこの二つが繋がる瞬間を楽しみに勉強すすめてまいりたいと思います。


#python


魔剤代。