【Python】 NumPy ~ 入門編 ~

■ はじめに

https://aidemy.net/
https://codexa.net

で、Python で AI (Artificial Intelligence) を行う際に
必要なライブラリの中で、
最も基本的なNumPy(ナンパイ)について扱う。

AI に関わってくるPython ライブラリ

(1)NumPy(ナンパイ) << 今回のテーマ
(2)Pandas (パンダス)
(3)SciPy 
(4)scikit-learn(サイキット・ラーン)
(5)TensorFlow
(6)Keras(ケラス)
(7)PyTorch(パイトーチ)
(8)Apache MXNet
(9)Chainer  (チェイナー)

他にも...
「Matplotlib」「seaborn」
「neologdn」「MeCab」
など

目次

【1】NumPy(ナンパイ)
【2】基本的な使い方
 例:NumPy配列の定義
【3】行列 / ベクトル
【4】Pythonの標準配列 と NumPy配列 との違い
【5】サンプル
 例1:一通りの処理
 例2:データの読込・書込

 【1】NumPy(ナンパイ)

 * Pythonでベクトルや行列計算を高速に行うための
 数値計算ライブラリ

【2】基本的な使い方

1)配列

* ndarray を使う

https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html

2)行列

* matrix を使う

https://numpy.org/doc/stable/reference/generated/numpy.matrix.html

例:NumPy配列の定義

import numpy as np

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

# [1 2 3]
print(a)
# <class 'numpy.ndarray'>
print(type(a))

# [[1 2]
# [3 4]]
print(b)
# <class 'numpy.matrix'>
print(type(b))

 【3】行列 / ベクトル

import numpy as np

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

# ベクトルの和
result = a + b
print(result) # [4 6]

# ベクトルスカラー倍
result = 4* a
print(result) # [4 8]

# ベクトル内積 - np.dot
result = np.dot(a, b)
print(result)

# 転置行列 - x.T
a = np.array([[1, 2, 3], [4, 5, 6]])
result = a.T
print(result)
# [[1 4]
# [2 5]
# [3 6]]

【4】Pythonの標準配列 と NumPy配列 との違い

import numpy as np

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

a1 = a1 + [4]
a2 = a2 + [4]

# [5 6 7] <= 各要素に+4されている
print(a1)
# [1, 2, 3, 4] <= 配列が追加
print(a2)

 【5】サンプル

例1:一通りの処理

# NumPyをimport()
import numpy as np

# np.array(リスト)で配列を高速に扱うためのndarrayクラスを生成
np_numbers = np.array([0,1,2,3,4,5,6,7])

print(np_numbers)

# <class 'numpy.ndarray'>が表示
print(type(np_numbers))

# arr[start:end]で、startから(end-1)までのリストが作成(変数arrの要素の内3, 4, 5が表示)
print(np_numbers[3:6])

# コピー(クローン)は、「コピーしたい配列.copy()」
clone_np_numbers = np_numbers.copy()

arr = np.array([26, -3, 23, -2, 6])

# 絶対値
print(np.abs(arr))
# eのべき乗(e : ネイピア数 Napier's constant)
print(np.exp(arr_abs))
# 平方根
print(np.sqrt(arr_abs))

例2:データの読込・書込

import numpy as np

# 配列を定義
hello_array = np.array(
  [[1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]])
# 書き込み:np.savetxt
np.savetxt('hello.txt', hello_array, delimiter=",")

# 読み込み:np.loadtxt
csv_data = np.loadtxt("sample.csv", dtype="unicode", delimiter=",")
print(csv_data)

print('------')

csv_data = np.loadtxt("sample.csv", skiprows=1, dtype="unicode", delimiter=",")
print(csv_data)
print()
print(csv_data[0][1])

入力結果:sample.csv

id,name,remarks
001,Mike,-
002,Tom,Hello
003,Smith,World

出力結果

[['id' 'name' 'remarks']
 ['001' 'Mike' '-']
 ['002' 'Tom' 'Hello']
 ['003' 'Smith' 'World']]
------
[['001' 'Mike' '-']
 ['002' 'Tom' 'Hello']
 ['003' 'Smith' 'World']]

Mike

出力結果:hello.txt

1.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00
4.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00
7.000000000000000000e+00,8.000000000000000000e+00,9.000000000000000000e+00

参考文献

loadtxt / savetxt
http://taustation.com/numpy-file-load-save/
https://note.nkmk.me/python-numpy-loadtxt-genfromtxt-savetxt/
https://deepage.net/features/numpy-loadsavetxt.html

関連記事

Pandas ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2020/10/14/000000
Pandas ~ 基本編 / CSV編 ~
https://dk521123.hatenablog.com/entry/2020/11/17/000000
Pandas ~ 基本編 / データのクレンジング ~
https://dk521123.hatenablog.com/entry/2020/04/06/235555
scikit-learn ~ 機械学習用ライブラリ ~
https://dk521123.hatenablog.com/entry/2020/03/02/233902
TensorFlow ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2018/02/16/103500
Keras ~ 深層学習用ライブラリ ~
https://dk521123.hatenablog.com/entry/2020/03/03/235302
PyTorch ~ 深層学習ライブラリ ~
https://dk521123.hatenablog.com/entry/2020/07/05/000000
Matplotlib ~ グラフ描画ライブラリ ~
https://dk521123.hatenablog.com/entry/2020/03/01/000000
IT技術の学習サイト
https://dk521123.hatenablog.com/entry/2020/02/29/003619