4.Numpy配列の計算

4.2.基本的な関数

(1)絶対値

配列各要素の絶対値をとります。
numpy.absolute(x)
>>> a
array([[-1, -2, -3],
       [-4, -5, -6]])
>>> np.absolute(a)
array([[1, 2, 3],
       [4, 5, 6]])

ベクトルの絶対値(大きさ)をとる場合は、linalg.normを使います。
numpy.linalg.norm(x)
>>> np.linalg.norm(a)
9.539392014169456

節はじめに戻る


(2)四捨五入/切り上げ/切り下げ

a)四捨五入

  • numpy.round(x, decimals)
  • x.round(decimals)
引数 設定 デフォルト 説明
tup 必須 - スカラーまたは配列を指定します。
decimals 省略可 0 小数点の位置を指定します。
roundによる四捨五入は、.5より小さければ切り捨て、.5より大きければ切り上げ、.5は偶数になる方へ丸めることになります。
.5を切り上げとするためには、四捨五入関数を自作する必要があります。
>>> x
array([0.3, 0.5, 1.5, 1.8, 2.5])
>>> y
array([0.01, 0.05, 0.08])

#四捨五入(.5は偶数に丸める)
>>> np.round(x)
array([0., 0., 2., 2., 2.])

#または
>>> x.round()
array([0., 0., 2., 2., 2.])

#小数点の位置を指定した四捨五入(.5は偶数に丸める)
>>> np.round(y,1)
array([0. , 0. , 0.1])

#または
>>> y.round(1)
array([0. , 0. , 0.1])

(2)のはじめに戻る

節はじめに戻る


b)切り上げ/切り下げ

  • 切り上げ:numpy.ceil(x, decimals)
  • 切り下げ:x.round(decimals)
引数 設定 デフォルト 説明
tup 必須 - スカラーまたは配列を指定します。
decimals 省略可 0 小数点の位置を指定します。
roundによる四捨五入は、.5より小さければ切り捨て、.5より大きければ切り上げ、.5は偶数になる方へ丸めることになります。
.5を切り上げとするためには、四捨五入関数を自作する必要があります。
>>> x
array([0.3, 0.5, 1.5, 1.8, 2.5])

#切り上げ
>>> np.ceil(x)
array([1., 1., 2., 2., 3.])

#切り下げ
>>> np.floor(x)
array([0., 0., 1., 1., 2.])

(2)のはじめに戻る

節はじめに戻る


(3)平方根(ルート)

numpy.sqrt(x)
引数 設定 デフォルト 説明
x 必須 - スカラーまたは配列を指定します。
>>> x
array([1, 2, 3])

>>> np.sqrt(x)
array([1.        , 1.41421356, 1.73205081])

#**を使っても計算できる
>>> x**0.5
array([1.        , 1.41421356, 1.73205081])

節はじめに戻る


(4)角度変換

  • degree → radian:numpy.radians(x)
  • radian → degree:numpy.degrees(x)
引数 設定 デフォルト 説明
x 必須 - スカラーまたは配列を指定します。
#degree → radian変換
>>> np.radians(180)
3.141592653589793

#radian → degree変換
>>> np.pi
3.141592653589793
>>> np.degrees(np.pi)
180.0

節はじめに戻る


(5)三角関数

  • numpy.sin(x)
  • numpy.cos(x)
  • numpy.tan(x)
引数 設定 デフォルト 説明
x 必須 - 角度を表すスカラーまたは配列(ラジアン)を指定します。
>>> a
array([ 0, 30, 45, 60, 90])
>>> np.radians(a)		#aをラジアンに変換
array([0.        , 0.52359878, 0.78539816, 1.04719755, 1.57079633])

>>> np.sin(arad)
array([0.        , 0.5       , 0.70710678, 0.8660254 , 1.        ])
>>> np.cos(arad)
array([1.00000000e+00, 8.66025404e-01, 7.07106781e-01, 5.00000000e-01,
       6.12323400e-17])
>>> np.tan(arad)
array([0.00000000e+00, 5.77350269e-01, 1.00000000e+00, 1.73205081e+00,
       1.63312394e+16])

節はじめに戻る


(6)逆三角関数

  • numpy.sin(x)
  • numpy.cos(x)
  • numpy.tan(x)
引数 設定 デフォルト 説明
x 必須 - スカラーまたは配列を指定します。
角度は-pi/2~pi/2の範囲で返します。
>>> x
array([0.        , 0.70710678, 0.5       , 1.        ])

>>> np.degrees(np.arcsin(x))
array([ 0., 45., 30., 90.])
>>> np.degrees(np.arctan(x))
array([ 0.        , 35.26438968, 26.56505118, 45.        ])

>>> np.degrees(np.arcsin(-x))
array([ -0., -45., -30., -90.])
>>> np.degrees(np.arctan(-x))
array([ -0.        , -35.26438968, -26.56505118, -45.        ])

節はじめに戻る


(7)指数関数

  • eのべき乗:numpy.exp(x)
  • 2のべき乗:numpy.exp2(x)
引数 設定 デフォルト 説明
x 必須 - スカラーまたは配列を指定します。
>>> x
array([0. , 0.5, 1. , 2. ])

>>> np.exp(x)
array([1.        , 1.64872127, 2.71828183, 7.3890561 ])

>>> np.exp2(x)
array([1.        , 1.41421356, 2.        , 4.        ])

節はじめに戻る


(8)対数関数

  • 底 = e:numpy.log(x)
  • 底 = 2:numpy.log2(x)
  • 底 = 10:numpy.log10(x)
引数 設定 デフォルト 説明
x 必須 - スカラーまたは配列を指定します。
>>> x
array([  1,   2, 100])

>>> np.log(x)
array([0.        , 0.69314718, 4.60517019])

>>> np.log2(x)
array([0.        , 1.        , 6.64385619])

>>> np.log10(x)
array([0.     , 0.30103, 2.     ])

節はじめに戻る


(9)行列積

numpy.dot(a, b)
引数 設定 デフォルト 説明
a, b 必須 - 行列を指定します。このとき、aの列数とbの行数は一致しなければなりません(行列積のルール)。
>>> a
array([[1, 2],
       [3, 4]])
>>> b
array([[2],
       [4]])

>>> np.dot(a, b)
array([[10],
       [22]])

#a*bだとアダマール積になる
>>> a*b
array([[ 2,  4],
       [12, 16]])

節はじめに戻る


(10)ベクトルの外積

numpy.cross(a, b, axisa, axisb, axisc, axis)
引数 設定 デフォルト 説明
a,b 必須 - 三次元または二次元ベクトル、またはそれらで構成される行列を指定しす。
axisa 省略可 -1 aのベクトル方向を指定します(0=縦方向、1=横方向)。
axisb 省略可 -1 bのベクトル方向を指定します(0=縦方向、1=横方向)。
axisc 省略可 -1 外積ベクトルの方向を指定します(0=縦方向、1=横方向)。
>>> v1
array([1, 2, 3])
>>> v2
array([2, 0, 2])

#ベクトルの外積
>>> np.cross(v1,v2)
array([ 4,  4, -4])

>>> m1
array([[1, 2, 3],
       [1, 1, 3]])
>>> m2
array([[3, 1, 2],
       [2, 3, 1]])

#ベクトルの外積
#m1、m2の1行目どうし、2行目どうしで計算実施
>>> np.cross(m1,m2)
array([[ 1,  7, -5],
       [-8,  5,  1]])

>>> np.cross(m1,m2,axisa=1,axisb=1)
array([[ 1,  7, -5],
       [-8,  5,  1]])

#二次元ベクトルとして計算(axisa、axisbはベクトルの方向を指定)
# m1、m2の1列目どうし、2列目どうし、3列目どうしで計算実施
>>> np.cross(m1,m2,axis=0,axisb=0)
array([-1,  5, -3])

>>> v3
array([[1],
       [2],
       [3]])
>>> v4
array([[2],
       [0],
       [2]])

#この場合、v3、v4はベクトルと認識されない
>>> np.cross(v3,v4)
Traceback (most recent call last):
・・・
ValueError: incompatible dimensions for cross product
(dimension must be 2 or 3)

#縦ベクトルとしてaxisa=0、axisb=0を指定すると
>>> np.cross(v3,v4,axisa=0,axisb=0)
array([[ 4,  4, -4]])

#横ベクトルと縦ベクトルの外積をとる場合
# v4のベクトルは縦ベクトルであることをaxisb=0で指定する
>>> np.cross(v1,v4 ,axisb=0)
array([[ 4,  4, -4]])

#同様に、v3ベクトルは縦ベクトルであることをaxisa=0で指定する
>>> np.cross(v3,v2,axisa=0)
array([[ 4,  4, -4]])

#axiscの使い方
>>> np.cross(v3,v2,axisa=0,axisc=0)	#axisc=0なので外積ベクトルは縦
array([[ 4],
       [ 4],
       [-4]])
>>> np.cross(v3,v2,axisa=0,axisc=1)	#axisc=1なので外積ベクトルは横
array([[ 4,  4, -4]])

節はじめに戻る


参考文献