【NumPy入門 np.abs】配列要素の絶対値を取るabs関数を使ってみよう

この記事ではnumpy.ndarrayの各要素の絶対値を返す関数np.absについて紹介します。

この記事を読むことで、以下のことがわかるはずです。

  • np.absの使い方
  • 絶対値とは
  • 複素数の絶対値とは
  • np.absoluteとは

これらについて興味がある方は、是非この記事を読み進めてみてください!

※ この記事のコードはPython 3.7, Ubuntu 18.04で動作確認しました。

np.absの使い方

※この記事のコードは、jupyter notebookjuputer 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についてもしも忘れてしまったら、またこの記事を見直してみてくださいね。

「プログラミング、右も左もわからない…」という方にオススメ

当プログラミングスクール「侍エンジニア塾」では、これまで6000人以上のエンジニアを輩出してきました。

その経験を通してプログラミング学習に成功する人は、「目的目標が明確でそれに合わせた学習プランがあること」「常に相談できる人がそばにいること」「自己解決能力が身につくこと」この3つが根付いている傾向を発見しました。

侍エンジニア塾は上記3つの成功ポイントを満たすようなサービス設計に磨きをかけております。

cta_under_bnr

「自分のスタイルや目的に合わせて学習を進めたいな」とお考えの方は、ぜひチェックしてみてください。

書いた人

フクロウ

第一言語はPythonです。
皆さんRustやりましょう。

おすすめコンテンツ

まずはここから!初心者でも1から学べるプログラミング入門カリキュラム

転職成功で受講料0円!あなたもプログラミングを学んでエンジニアデビュー