【Python】Numpyの基本
Numpyのドキュメント
numpyのlearnのページから勉強することができます。
Numpy配列(ndarray)の基本
ndarrayの作成
numpyライブラリをインポートして配列を作成します。
INPUT
# numpyライブラリインポート
import numpy as np
# numpy配列への格納
a = np.array([1, 2, 3])
a
OUTPUT
array([1, 2, 3])
格納した配列の型を確認します。numpy配列はndarrayという型になります。
INPUT
# 型の確認
type(a)
OUTPUT
numpy.ndarray
次元(ndim)の確認(一次元)
ndimメソッドを使用して次元数を確認することができます。
INPUT
# 一次元の場合
a = np.array([1, 2, 3])
# 次元の確認
a.ndim
OUTPUT
1
INPUT
# 二次元の場合
b = np.array([[1, 2], [3, 4]])
b.ndim
OUTPUT
2
要素数(size)の確認
sizeを使用することで要素数を取得することができます。
INPUT
# 一次元の場合
a = np.array([1, 2, 3])
a.size
OUTPUT
3
INPUT
# 二次元の場合
b = np.array([[1, 2], [3, 4]])
b.size
OUTPUT
4
形状(shape)の確認
shapeを使用することでndarrayの形状の確認ができます。
INPUT
# 1次元の場合
a = np.array([1, 2, 3])
a.shape
OUTPUT
(3,)
INPUT
# 2次元の場合
b = np.array([[1, 2], [3, 4]])
b.shape
OUTPUT
b = np.array([[1, 2], [3, 4]])
形状の変更(reshape)
reshapeを使用してshapeを(2, 3)から(3, 2)へ変更することができます。
INPUT
# (2, 3)のshapeの作成
a = np.array([[1, 2, 3], [4, 5, 6]])
a.reshape((3,2))
OUTPUT
array([[1, 2],
[3, 4],
[5, 6]])
デフォルトではreshapeの際のインデックスがC-likeになりますが、orderオプションでFortran-likeのインデックスを使用して形状変更することもできます。
INPUT
a.reshape((3,2), order = 'F')
OUTPUT
array([[1, 5],
[4, 3],
[2, 6]])
データ型の確認
dtype.nameを使用してデータ型を確認することができます。
INPUT
# データ型の確認
print(np.array([1, 2, 3]).dtype.name)
print(np.array([1.5, 2.5, 3.5]).dtype.name)
print(np.array(['a', 'b', 'c']).dtype.name)
print(np.array([1 + 1j, 2 + 1j, 3 + 1j]).dtype.name)
print(np.array([True, False]).dtype.name)
OUTPUT
int32
float64
str32
complex128
bool
型の指定
ndarrayの作成時にdtypeを指定することで型を指定することができます。
INPUT
np.array([1, 2, 3], dtype = 'float64')
OUTPUT
array([1., 2., 3.])
オブジェクト型を使用した場合は次のようになります。
INPUT
# オブジェクト型を指定しない場合
a = np.array([1, 2.5, 'a'])
print(a.dtype.name)
for i in range(len(a)):
print(type(a[i]))
# オブジェクト型を指定した場合
a = np.array([1, 2.5, 'a'], dtype = 'object')
print(a.dtype.name)
for i in range(len(a)):
print(type(a[i]))
str1024
<class 'numpy.str_'>
<class 'numpy.str_'>
<class 'numpy.str_'>
object
<class 'int'>
<class 'float'>
<class 'str'>
# (2, 3)のshapeの
バイトサイズの確認
itemsizeを使用してバイトサイズの確認を行うことができます。
INPUT
# バイトサイズの確認 int32
int32 = np.array([1, 2]).itemsize
print('int32_byte : ', int32)
# バイトサイズの確認 float64
flt64 = np.array([1.5, 2.5]).itemsize
print('flt64_byte : ', flt64)
OUTPUT
int32_byte : 4
flt64_byte : 8
アドレスの確認
dataを使用することでデータが格納される先頭のポインタのアドレスを確認できます。
INPUT
np.array([1, 2]).data
OUTPUT
<memory at 0x000001F6766D0C40>
ndarrayの操作
要素を指定してndarrayを作成
要素が1となる配列の作成
INPUT
# 要素が0のndarrayを作成
np.zeros((2, 2))
OUTPUT
# 要素が0のndarray
np.zeros((2, 2))
要素が1となる配列の作成
INPUT
# 要素が1のndarray
np.ones((2, 2))
OUTPUT
# 要素が1のndarray
np.ones((2, 2))
ランダムな値を要素にもつ配列の作成
INPUT
# 要素にランダムな値のndarray
rg = np.random.default_rng()
rg.random((2, 2))
OUTPUT
array([[0.84665476, 0.05058694],
[0.09643972, 0.07346462]])
等差数列のndarray
1づつ10要素のndarray
INPUT
# 0から10要素
np.arange(10)
OUTPUT
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
5づつ100までの数列
INPUT
# 1から100までの5づつ増える数列
np.arange(1, 100, 5)
OUTPUT
array([ 1, 6, 11, 16, 21, 26, 31, 36, 41, 46, 51, 56, 61, 66, 71, 76, 81,
86, 91, 96])
数学的な操作
最大・最小の取得
max, minを使用して最大・最小値の取得ができます。
INPUT
# 最大と最小
a = np.array([[2, 5],[1.5, 8]])
print(a.max())
print(a.min())
OUTPUT
8.0
1.5
合計値の取得
sumを使用することで要素の合計値を取得することができます。
INPUT
# 合計値を取得
a.sum()
OUTPUT
16.5
累積値の取得
cumsumを使用することで要素内の値の累積値を計算することができます。
INPUT
a = np.array([[2, 5],[1.5, 8]])
# 累積値の計算
a.cumsum()
OUTPUT
array([ 2. , 7. , 8.5, 16.5])
指数関数
expを使用することができます。
INPUT
np.exp(1)
OUTPUT
np.exp(1)
ndarrayに対して使用すると各要素に対して計算が行われます。
INPUT
np.exp(np.array([0, 1]))
OUTPUT
array([1. , 2.71828183])
対数
logで基底を指定して使用できます。
INPUT
a = np.log(2.718281828459045)
b = np.log10(10)
print(a)
print(b)
OUTPUT
1.0
1.0
平方根
sqrt関数により平方根の値を計算することができます。
INPUT
a = np.array([1, 4, 9, 10])
np.sqrt(a)
OUTPUT
array([1. , 2. , 3. , 3.16227766])