この記事ではnumpy.ndarrayの各要素の絶対値を返す関数、np.absについて紹介します。
この記事を読むことで、以下のことがわかるはずです。
- np.absの使い方
- 絶対値とは
- 複素数の絶対値とは
- np.absoluteとは
これらについて興味がある方は、是非この記事を読み進めてみてください!
※ この記事のコードはPython 3.7, Ubuntu 18.04で動作確認しました。
np.absの使い方
※この記事のコードは、jupyter notebookやjuputer labを使って書かれています。
コードを試すときは是非これらを使ってみてください。
np.absの基本的な使い方
np.absは、配列の各要素に対して、絶対値を取った配列を作る関数です。
使い方は非常に簡単なので、サンプルコードを見てみましょう。
# コード In [1]: import numpy as np import matplotlib.pyplot as plt
# コード In [2]: a = np.linspace(-10,10,11) a.sort() a
# 出力結果 Out [2]: array([-10., -8., -6., -4., -2., 0., 2., 4., 6., 8., 10.])
ここまでで、-10から10までの範囲で11個の要素を持った等差数列aができました。
これを使ってnp.absを試してみましょう。
# コード In [3]: np.abs(a)
# 出力結果 Out [3]: array([10., 8., 6., 4., 2., 0., 2., 4., 6., 8., 10.])
配列の各要素に対して絶対値を取った新しい配列ができていることがわかりますね。
この関数の基本的な使い方はこれだけです。
複素数の絶対値
np.absは複素数の絶対値も計算できます。
# コード In [4]: complex_val = 3-2j print(type(complex_val)) print(np.abs(3-2j))
# 出力結果 [4]: <class 'complex'> 3.605551275463989
複素数の絶対値は、xy平面でx軸を実数(ここでは3)、y軸を虚数(ここでは-2)に対応させて考えて(これを複素平面といいます)と、三平方の定理で求められますね。
参考:
また、もちろん複素数でもnp.ndarrayにすることができ、複素数の配列に対してもnp.absは使えます。
# コード In [5]: b = np.array([1+i*1j for i in range(-10,10,5)]) print("配列b:\n", b, "\n") print("配列bの要素の型:\n", b.dtype, "\n") print("np.abs(b):\n",np.abs(b))
# 出力結果 [5]: 配列b: [1.-10.j 1. -5.j 1. +0.j 1. +5.j] 配列bの要素の型: complex128 np.abs(b): [10.04987562 5.09901951 1. 5.09901951]
そもそも絶対値とは
np.absの使い方を確認したところで、絶対値について確認しておきます。
絶対値とは「0からどれだけ離れているか」を表した値です。
つまりグラフにすると以下のようになります。
# コード In [6]: plt.plot(a, np.abs(a))
np.absoluteとnp.absは同じ関数
np.abs以外にも、NumPyの絶対値を返す関数としてnp.absoluteがあります。
# コード In [7]: np.absolute(a)
# 出力結果 Out [7]: array([10., 8., 6., 4., 2., 0., 2., 4., 6., 8., 10.])
この二つの関数は同じ関数です。
好きな方を使ってください。
まとめ
この記事では、np.ndarrayを受け取り絶対値を返すnp.abs関数を解説しました。
このような簡単な計算も、NumPyの関数をしっかり使うことで計算が高速化できます。
np.absについてもしも忘れてしまったら、またこの記事を見直してみてくださいね。