Python入門:基本のNumPyの使い方 (1次元配列)
はじめに
NumPyについて、基本的な使い方をまとめました。
動作環境
OS:MacOS 11.2.3(Big Sur)
Python:3.9.0
NumPy:1.20.2
基本操作
NumPy配列の生成
以下の例のように、list配列からNumPy配列を生成する方法があります。
>>> import numpy as np
>>> a = np.array([0, 0.5, 1.0, 1.5, 2.0]) #list配列から生成
>>> type(a)
numpy.ndarray
>>> a = np.array(list('abc')) #文字列のリスト配列から生成
>>> a
array(['a', 'b', 'c'], dtype='<U1')
単純な数値のシーケンスを要素として生成するためにarange()関数が用意されています。
numpy.arange(start, end, step)
startからend - 1までの数字の順列をstep飛ばしで作成します。startは何も指定しないと0となります。stepは何も指定しないと1です。
>>> import numpy as np
>>> a = np.arange(8)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7])
>>> a = np.arange(1, 8)
>>> a
array([1, 2, 3, 4, 5, 6, 7])
>>> a = np.arange(1, 8, 2)
array([1, 3, 5, 7])
>>> a = np.arange(8, dtype=float) #データ型を指定できる。
array([0., 1., 2., 3., 4., 5., 6., 7.])
list配列と同様に、スライス機能もあります。
>>> import numpy as np
>>> a = np.arange(8)
array([0, 1, 2, 3, 4, 5, 6, 7])
>>> a[:5]
array([0, 1, 2, 3, 4])
>>> a[5:]
array([5, 6, 7])
ndarrayクラスの組み込みメソッド
統計学でよく使われる平均や分散、標準偏差など、多数の関数をメソッドとして持っています。いくつか例をあげます。
>>> import numpy as np
>>> a = np.arange(8, dtype=float)
>>> a
array([0., 1., 2., 3., 4., 5., 6., 7.])
>>> a.sum() #総和
28.0
>>> a.mean() #平均
3.5
>>> a.var() #分散
5.25
>>> a.std() #標準偏差
2.29128784747792
>>> a.cumsum() #先頭要素からの累積和
array([ 0., 1., 3., 6., 10., 15., 21., 28.])
ベクトル演算
NumPyでは、ベクトル演算が定義されています。これによって複雑な演算処理のコーディングもシンプルに作成できます。
>>> import numpy as np
>>> a = np.arange(8, dtype=float)
>>> a
array([0., 1., 2., 3., 4., 5., 6., 7.])
# 各要素に定数を加算
>>> a + 3
array([ 3., 4., 5., 6., 7., 8., 9., 10.])
# 定数を各要素に加算
>>> 3 + a
array([ 3., 4., 5., 6., 7., 8., 9., 10.])
# 同じオフセットの要素の和
>>> a + a
array([ 0., 2., 4., 6., 8., 10., 12., 14.])
# 各要素を定数倍
>>> a * 3
array([ 0., 3., 6., 9., 12., 15., 18., 21.])
# 各要素をベキ乗
>>> a ** 2
array([ 0., 1., 4., 9., 16., 25., 36., 49.])
# 同じオフセットの要素の乗算
>>> a ** a
array([ 0., 1., 4., 9., 16., 25., 36., 49.])
NumPyに定義されているスタティックの数理関数
数学で使われる指数関数や平方根、logなどもNumPyパッケージに含まれています。
>>> import numpy as np
>>> a = np.arange(8, dtype=float)
>>> a
>>> np.exp(a) #要素ごとに指数演算
array([1.00000000e+00, 2.71828183e+00, 7.38905610e+00, 2.00855369e+01,
5.45981500e+01, 1.48413159e+02, 4.03428793e+02, 1.09663316e+03])
>>> np.sqrt(a) #要素ごとに平方根
array([0. , 1. , 1.41421356, 1.73205081, 2. ,
2.23606798, 2.44948974, 2.64575131])
>>> np.log(a) #要素ごとにlog関数を適用。ただし、要素が'0'についてはWarningが表示され、計算結果も’-inf'となります
array([ -inf, 0. , 0.69314718, 1.09861229, 1.38629436,
1.60943791, 1.79175947, 1.94591015])
Pythonでの数理関数にはmathパッケージもあります。単一の要素を計算する場合は、mathの方が計算速度が早いです。pythonのコマンドインタプリタでは、%timeit
を実行する関数の前に記載することで、処理速度を計測できます。
>>> import numpy as np
>>> import math
>>> %timeit np.sqrt(4)
1.05 µs ± 13.4 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each) #µs = マイクロ秒 (1秒 = 1,000,000µs)
>>> %timeit math.sqrt(4)
129 ns ± 6.05 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each). #ns = ナノ秒 (1µs = 1,000ns)
>>>
上記の例を見ても、mathパッケージに比べるとNumPyの方が処理速度が落ちますので、注意しなければなりません。
等間隔の1次元配列の生成
aからbをx等分した場合の配列を作成することができます。
>>> import numpy as np
>>> a = np.linspace(0,5,12) #0から5までを12等分する
>>> a
array([0. , 0.45454545, 0.90909091, 1.36363636, 1.81818182,
2.27272727, 2.72727273, 3.18181818, 3.63636364, 4.09090909,
4.54545455, 5. ])
Author And Source
この問題について(Python入門:基本のNumPyの使い方 (1次元配列)), 我々は、より多くの情報をここで見つけました https://qiita.com/smoriuchi/items/76dea868e0e2487a7503著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .