ユーニックス総合研究所

  • home
  • archives
  • python-abs-tsukaikata

Pythonのabs関数の使い方【絶対値、math.fabs, numpy.abs, numpy.absolute】

  • 作成日: 2022-03-22
  • 更新日: 2023-12-25
  • カテゴリ: Python

Pythonのabs関数の使い方

Pythonでは組み込みのabs関数を使って絶対値を求めることができます。
絶対値は表示系のプログラミング(ユーザーインターフェース関連)で使われることがあります。
またゲーム開発でもよく使われます。

abs関数について知っておくと自分で車輪の再開発をしなくて済むかもしれません。
この記事ではabs関数と絶対値について解説します。
また、関連するmath.fabs関数とnumpyのnumpy.abs関数, numpy.absolute関数についても解説します。

関連記事

頭が悪い人のPythonのevalの使い方
頭がいい人のPythonのexitの使い方
状態遷移による文字列パースのテクニック【Python】
形態素解析で代名詞+助詞+名詞を文章から抜き出す【Python, 自然言語処理, Janome】
在宅・未経験、Pythonで稼ぐ方法は?【取引・宣伝・広告】

絶対値とは?

絶対値とは「0」からの距離を表した値のことを言います。
たとえば「3」の絶対値は「3」です。
これは「3」が「0」から3つ離れているからです。

「-3」の絶対値も「3」になります。
これも同じ理由です。

負数の絶対値を求めると、負数の符号をプラスにすることが可能です。

  整数: ... -3 -2 -1 0 1 2 3 ...  
絶対値: ...  3  2  1 0 1 2 3 ...  

abs関数の使い方

abs関数はPythonの組み込み関数の1つです。
これに値を渡すと、その値の絶対値を求めることができます。

組み込み関数 — abs — Python 3.10.0b2 ドキュメント

n = abs(-3)  
print(n)  # 3  

↑は整数「-3」の絶対値をabs関数で求めています。
abs関数には実数も渡すことが出来ます。

n = abs(-1.23)  
print(n)  # 1.23  

abs関数には16進数も渡すことができます。
結果は10進数で返ってきます。

n = abs(-0x12)  
print(n)  # 18  

複素数(complex型)も渡すことができます。

n = abs(-1-3j)  
print(n)  # 3.1622776601683795  

Noneを渡すとエラーになります。

abs(None)  
Traceback (most recent call last):  
  File "abs.py", line 1, in <module>  
    abs(None)  
TypeError: bad operand type for abs(): 'NoneType'  

エラー内容は「Noneはabs関数の良くないオペランドのタイプです」になります。

math.fabs関数の使い方

math.fabs関数はabs関数と違い、複素数を渡すことができません。
また整数(int)を渡した場合の返り値も実数(float)になります。

math — fabs — Mathematical functions — Python 3.10.2 documentation

import math  

n = math.fabs(-3)  
print(n)  # 3.0  
import math  

n = math.fabs(-1.23)  
print(n)  # 1.23  

Noneを渡した場合はエラーになります。

Traceback (most recent call last):  
  File "mathfabs.py", line 9, in <module>  
    math.fabs(None)  
TypeError: must be real number, not NoneType  

エラー内容は「Noneじゃなくて現実的な値にしてください」になります。

numpyで絶対値を求める

numpyではabs関数とabsolute関数を使えます。
これらはどちらも配列などの絶対値を求めます。

import numpy as np  

# 整数  
ary = np.array([-1, -2, -3])  

result = np.abs(ary)  
print(result)  # [1 2 3]  

result = np.absolute(ary)  
print(result)  # [1 2 3]  

# 実数  
ary = np.array([-1.23, -2.23, -3.23])  
result = np.abs(ary)  
print(result)  # [1.23 2.23 3.23]  

# 複素数  
ary = np.array([-3.2-1.0j, 3.2+1.0j])  
result = np.abs(ary)  
print(result)  # [3.35261092 3.35261092]  

np.abs関数にはスカラー値やリスト、タプルを渡すことも可能です。

import numpy as np  

# スカラー値  
result = np.abs(-3)  
print(result)  # 3  
print(type(result))  # <class 'numpy.int64'>  

# リスト  
result = np.abs([-1, -2, -3])  
print(result)  # [1 2 3]  
print(type(result))  # <class 'numpy.ndarray'>  

# タプル  
result = np.abs((-1, -2, -3))  
print(result)  # [1 2 3]  
print(type(result))  # <class 'numpy.ndarray'>  

numpy.abs()とnumpy.absolute()はどちらもNoneを渡すとエラーになります。

import numpy as np  

np.abs(None)  
Traceback (most recent call last):  
  File "np.py", line 3, in <module>  
    np.abs(None)  
TypeError: bad operand type for abs(): 'NoneType'  
import numpy as np  

np.absolute(None)  
Traceback (most recent call last):  
  File "np.py", line 5, in <module>  
    np.absolute(None)  
TypeError: bad operand type for abs(): 'NoneType'  

おわりに

今回はPythonで絶対値を求める方法を解説しました。
とりあえず組み込みのabs関数を使っておけばOKです。

🦝 < 絶対値宣言

🐭 < ゲーム開発でよく使うよ