【Python】絶対値の取得方法を初心者向けにやさしく解説

はじめに

Pythonのプログラムを組むうえで、正負の値を区別せずに扱いたい場面は多いかもしれません。
たとえば、センサーの数値がマイナスであっても、その絶対値を使って距離を求めるといったケースが考えられます。
そこで役に立つのが、abs()関数という機能です。
このabs()関数を使うことで、符号に関係なく数値の大きさを簡単に取得できます。
本記事では、このabs()関数やmathモジュールのfabs()関数を中心に、実務や学習でどのように活用できるのかを具体的に解説します。

ここでは、初心者の方にも理解しやすいように、なるべく専門用語をかみ砕きながら、丁寧にコード例を紹介します。
プログラミングに慣れていない方でも読みやすいように、段落を短めに分けて進めていきます。
少しでも「こういうときに絶対値をとれると便利だな」というイメージを持っていただけるよう、実務でありがちな例もあわせて取り上げます。

この記事を読むとわかること

  • abs()関数を使って数値の絶対値を簡単に取得する方法
  • mathモジュールのfabs()関数との違いと使い所
  • 絶対値を使うと便利になる、実務での具体的な活用シーン
  • 他の数学系機能や演算子との組み合わせ例
  • 金融や座標計算など、さまざまな場面で役立つサンプルコード

Pythonで絶対値を取得するとは?

Pythonでいう「絶対値の取得」とは、数値の符号を無視して、その値の大きさのみを取り出すということです。
たとえば数値が+5ならそのまま5となり、数値が-5なら5になります。
プログラミングで扱うデータは、必ずしも正の値だけとは限りません。

負の値を取り扱うケースとしては、座標計算誤差計算などが挙げられます。
こうした場面で絶対値を用いると、結果をさらにわかりやすく加工できます。
また、データの差分がプラスかマイナスかに関わらず、「どれだけ大きく変化したか」を知りたいときにも絶対値は重宝します。

Pythonにおいて絶対値を取得するときは、主に以下の方法があります。

  1. abs()関数(組み込み関数)
  2. mathモジュールのfabs()関数

どちらも似たような動きをするのですが、使い分け方や挙動が微妙に異なるところもあります。
後ほど両者の違いを比較しながら、具体的に見ていきましょう。

abs関数の基本的な使い方

まずは、組み込み関数であるabs()関数に注目します。
Pythonでは追加のモジュールをインポートせずに、abs()をそのまま呼び出せば数値の絶対値が取得可能です。

たとえば、以下のようにコードを書きます。

# シンプルに絶対値を取得する例
num1 = 10
num2 = -8

result1 = abs(num1)
result2 = abs(num2)

print(result1)  # 10
print(result2)  # 8

このとき、abs(10)は10をそのまま返し、abs(-8)は8を返します。
文字どおり、符号に関係なく数値の大きさを得られます。

また、abs()関数は整数だけでなく 浮動小数点数 (小数点を含む数値)にも利用できます。
たとえば、-3.1415 という値に対して abs(-3.1415) と呼べば 3.1415 を返します。
さらに、複素数を入れた場合には、絶対値(複素数の大きさ)を計算して返してくれる点も特徴です。

# 複素数の絶対値を取得する例
complex_num = 3 - 4j
absolute_val = abs(complex_num)
print(absolute_val)  # 5.0

複素数 3 - 4j の大きさは 5 なので、このように5.0という結果が得られます。

abs関数を使うメリット

Pythonでabs()を使うメリットは、いくつか挙げられます。

1. コードが簡潔になる

内蔵関数なので、モジュールのインポートなしにすぐ使えてシンプルです。

2. あらゆる型に対応

整数や浮動小数点数のほか、先ほどの複素数にも対応しています。

3. 高速に処理できる

標準関数として最適化されているため、実行速度も十分に軽快です。

基本的には「とにかく絶対値が欲しい」「難しい処理はいらない」というケースでは abs() を使うだけで済むことがほとんどでしょう。
また、初心者の方が学習する際にも、abs()を使っていきなり複素数を扱うようなケースは少ないかもしれませんが、「絶対値はそういうところでも応用が効くんだな」というイメージを持つと理解が深まります。

mathモジュールのfabs()関数

次に、mathモジュールから提供されている**fabs()**関数を見てみます。
fabs()も数値の絶対値を返すという意味ではabs()関数とほぼ同じように使えますが、主に浮動小数点数を扱う目的で設計されています。

まず、利用するときは以下のようにモジュールをインポートします。

import math

value = -3.7
result = math.fabs(value)
print(result)  # 3.7

このように書くと、変数valueが-3.7であれば3.7が返ってきます。
fabs()は常に浮動小数点型の値を返す点が特徴と言えます。
一方で、abs()関数は整数が入力されれば整数で返すなど、入力された値の型をある程度尊重します。
そのため、「絶対値をとった結果も常に浮動小数点数で欲しい」という場合には、fabs()を使うほうが自然です。

ただし、整数を与えてもfabs()が正しく絶対値を返すことに変わりはありません。
ただ返ってくるのは整数ではなく、浮動小数点数(たとえば 5.0)になる点に気をつけてください。

import math

value_int = -10
result_int = math.fabs(value_int)
print(result_int)  # 10.0

上記の場合、結果は 10.0 となります。
このように、型の違いこそあれど、実務上はほぼ同じ結果が得られるため、「必ず浮動小数点型として扱いたい」「すでに他のmathモジュールの関数と合わせて使っている」などの理由があればfabs()を使うケースが出てきます。

abs関数とfabs関数の違い

ここまでで、abs()関数とfabs()関数の概要を見てきました。
両者の主な違いを、あらためてざっくり整理すると以下のとおりです。

  • abs()関数

    • Pythonの組み込み関数である
    • 整数・浮動小数点数・複素数など幅広く対応
    • 戻り値は元の型に準ずる(整数なら整数、浮動小数点数なら浮動小数点数など)
  • fabs()関数

    • mathモジュールに含まれている
    • 主に浮動小数点数の絶対値を扱うための関数
    • 戻り値は常に浮動小数点型(float)

基本的にはabs()があれば十分ですが、浮動小数点が前提の計算処理の一部としてfabs()を使うと、一貫して同じ型で処理できて便利なときがあります。
また、複素数に対してfabs()は直接適用できません。そのような場合はabs()を使わなければならないので、目的に合わせて選ぶようにしましょう。

絶対値を使った実務での活用シーン

絶対値を取り扱う場面は意外と多く、実務的にもいくつかの典型的な使用例があります。

1. センサーデータのオフセット計算

たとえば、センサーから得た値がプラス・マイナスにぶれる場合でも、その振れ幅の大きさだけを取り出したいケースが考えられます。
絶対値を使えば、振れ幅を手軽に可視化できます。

2. 誤差や差分の測定

2つの値の差をとるとき、結果がマイナスになる可能性があります。
しかし、差分の「大きさ」だけ必要なときには絶対値をとると便利です。
たとえば、商品の価格変動やテストスコアの違いなど、プラスかマイナスかに関係なく変化量の大きさを把握したいときなどに使えます。

3. 座標計算や距離の測定

2次元や3次元の座標計算で、あるポイントからの距離を求めたい場合に絶対値がよく使われます。
x座標やy座標が負の値でも、移動距離や衝突判定に関しては絶対値が必要になることがあります。

4. 金融データの分析

損益計算などでプラス(利益)とマイナス(損失)にかかわらず、取引量の変動や値動きの大きさだけを比較したいケースが多々あります。
そのようなときも絶対値は頻繁に使われます。

このように、業務に応じた用途を思い浮かべながら「どういうときに負の符号が紛れ込む可能性があるか」を考えてみると、abs()の必要性が自然と見えてくるでしょう。
また、絶対値をとったあとにさらに平均を計算したりグラフ化したりと、さまざまな後処理に発展できます。

絶対値以外の関連機能と使い方

絶対値を利用する場面では、しばしば他の数学系の関数や機能とも組み合わせて使われることが多いです。
ここでは、代表的な例を挙げてみましょう。

丸め関数との組み合わせ

たとえばround()floor()(切り捨て)、ceil()(切り上げ)と組み合わせて、絶対値を丸めることがよくあります。
誤差の調整や、表示上の都合で桁数を揃えたいときなどに便利です。

import math

num = -3.7
abs_val = abs(num)   # 3.7
rounded_val = round(abs_val)  # 4
floored_val = math.floor(abs_val)  # 3
ceiled_val = math.ceil(abs_val)    # 4

最大値や最小値との組み合わせ

例えば、複数の値について「絶対値が最大のものはどれか」を探したいときには、リスト内包表記などと組み合わせて処理することがあります。

numbers = [3, -7, 2, 9, -10]
max_abs_val = max(numbers, key=lambda x: abs(x))
print(max_abs_val)  # -10

上の例では、key=lambda x: abs(x) という指定をすることで、「絶対値に基づいて最大値を選択する」ことが可能です。
この結果、-10が絶対値10と最も大きいので選ばれます。

条件分岐との組み合わせ

条件分岐で「絶対値がある閾値を超えたかどうか」を判定し、警告を出したり別の処理に分岐させたりするケースはよくあります。
たとえば、設備の振動値が一定以上の大きさになったらメンテナンスをする、といった仕組みです。

vibration_data = [-1.5, 0.3, 2.1, -3.4, 1.9]
threshold = 2.0

for data in vibration_data:
    if abs(data) > threshold:
        print("Warning: 振動が大きすぎます。")

このように、abs()が組み込まれるロジックは意外と広範囲にわたります。

演算子と組み合わせた応用例

プログラミングでは、絶対値そのものを利用するだけでなく、演算子との組み合わせでロジックをまとめる場合も多いです。
以下のように、四則演算や三項演算子(Pythonでは if-else の式)などを活用して可読性を高めることがあります。

三項演算子風の記述例

Pythonでは三項演算子として明示的な構文はありませんが、A if condition else B という書き方で同等のことが可能です。
もしも数値がマイナスなら符号を反転し、そうでなければそのまま使うという処理を、自分で書くと以下のようになります。

num = -7
abs_value_manual = num if num >= 0 else -num
print(abs_value_manual)  # 7

ここでは実質的に abs(num) と同じ結果が得られますが、自前で条件分岐を組むことで、途中で追加の検証やロギックを挟むことが容易になります。
ただし、単純に絶対値をとるだけならabs()を使うほうが読みやすいでしょう。

計算ロジックに埋め込む例

以下のコードは、数値のリストを正規化(データを一定の範囲に収める)する簡単な例です。
絶対値を用いて、値がプラスかマイナスかに関係なく大きさの合計をとり、その比率で割るといった処理をまとめています。

numbers = [3, -7, 2, 9, -10]
sum_abs = sum(abs(n) for n in numbers)
normalized = [(n / sum_abs) for n in numbers]
print(normalized)

このときsum_absは全要素の絶対値の合計になるので、結果としてリスト内の各値が「-1.0〜+1.0程度の範囲」に正規化されます。
こうした計算は、単にabs()を呼ぶだけでなく、演算子と組み合わせることでより複雑なロジックに発展させられます。

多次元データに対する絶対値の活用

座標計算や画像処理など、二次元や三次元のデータを扱うときも絶対値が登場します。
2点間の距離を求めるとき、x座標・y座標の差分をそれぞれ絶対値にしてから何らかの処理をする、という手順はよくあるパターンです。

例えば、碁盤の目のようにマス目があるとき、タクシー距離(マンハッタン距離)を計算するコード例を挙げてみましょう。
タクシー距離とは、x座標の差とy座標の差の絶対値をそれぞれ足したものをいいます。

def manhattan_distance(p1, p2):
    return abs(p1[0] - p2[0]) + abs(p1[1] - p2[1])

point_a = (3, 5)
point_b = (-1, 2)
dist = manhattan_distance(point_a, point_b)
print(dist)  # 7

ここでは、abs()がなければマイナスになる可能性のある座標の差を計算できず、正の距離として処理できなくなってしまいます。
このように、二次元や三次元のデータを扱う場合、abs()をいくつも組み合わせて距離や大きさを計算することが一般的です。

コード例:座標変換や衝突判定

さらに発展的な例として、ゲームプログラミングやシミュレーションなどの分野では「あるオブジェクトが別のオブジェクトに接触したかを判定する」ために絶対値が使われることがあります。
以下は、簡易的な衝突判定ロジックの例です。

def is_colliding(obj1, obj2):
    """
    obj1, obj2 は (x, y, 半径) で示される円形のオブジェクトを想定
    """
    dx = abs(obj1[0] - obj2[0])
    dy = abs(obj1[1] - obj2[1])
    distance = (dx**2 + dy**2) ** 0.5
    return distance <= (obj1[2] + obj2[2])

circle1 = (0, 0, 5)
circle2 = (6, 3, 2)

if is_colliding(circle1, circle2):
    print("衝突しています。")
else:
    print("衝突していません。")

この例では、円の中心座標 (x, y) の差分を絶対値でとり、そこから実際の距離を計算して「2つの円の半径の合計以下」であれば衝突とみなしています。
もちろん、距離の計算自体はdx, dyをそのまま2乗しているので符号は関係ありませんが、途中の計算ステップやエラー処理でabs()を使っておくとロジックがわかりやすい場合もあります。

コード例:金融データの変動幅の計算

金融データの分野では、株価の上昇・下落に関わらず値動きの幅を測定するために絶対値を多用します。
たとえば、以下のように過去の価格データを見て「前日比の変動幅」を絶対値で集計するコードを書いてみましょう。

prices = [100, 105, 103, 110, 108, 115]
changes = []

for i in range(1, len(prices)):
    diff = prices[i] - prices[i-1]
    changes.append(abs(diff))

print(changes)  # [5, 2, 7, 2, 7]

average_change = sum(changes) / len(changes)
print(average_change)  # 平均の変動幅

ここでは、差分 diff がプラスかマイナスかに関わらず、その大きさのみを abs(diff) で取り出しています。
最終的に変動幅の平均を計算すれば、市場がどれくらい動いているかの目安として使うことができるかもしれません。
このように、金融・経理などの分野では符号よりも変化量に着目する場面が多いため、abs()やfabs()を組み込む場面がしばしば登場します。

エラーを防ぐためのポイント

abs()関数やfabs()関数自体はシンプルですが、利用時にいくつか気をつけたいことがあります。

1. 文字列に対してはエラーが出る

abs("test") のように文字列を入れると TypeError が発生します。
そのため、数値以外が紛れ込む可能性のある変数には変換処理が必要です。

2. 複素数はfabs()では扱えない

複素数を浮動小数点型として処理することはできず、fabs()は複素数をサポートしていません。
複素数の絶対値をとる場合は abs() を使う必要があります。

3. データ型を把握しておく

math.fabs()は常に float を返すため、後続の処理で整数を想定していると型が合わずに混乱が起きることがあります。
必要に応じて int() などで型変換するか、最初から abs()を使うかを検討しましょう。

こうしたポイントを押さえておけば、abs()やfabs()が原因のエラーはかなり防げるはずです。

数値データ以外の値をabs()やfabs()に渡すとエラーとなるため、コードを書く際には変数の中身をしっかり確認しておくことが大切です。

開発現場で気をつけたいポイント

実際に開発プロジェクトでabs()やfabs()を使うときには、以下のような点に注意しておくと良いでしょう。

1. 要件に合わせて型をそろえる

とくに数値演算が連続する処理では、途中で整数型・浮動小数点型が切り替わると計算誤差や意図しない結果に結びつくこともあります。

2. 大規模データの処理

毎回abs()を呼び出すよりも、必要な部分だけまとめて絶対値変換をするほうが効率的な場合があります。
ただし、Pythonのabs()自体は比較的高速ですので、過剰に分割しないほうが可読性は高いかもしれません。

3. 複素数計算における扱い

複素数を使う場面はそれほど多くないかもしれませんが、科学技術計算やシミュレーションで扱うことがあります。
fabs()ではなくabs()を使う必要があることを意識しておきましょう。

4. 演算処理の分岐

絶対値をとった結果が想定外に大きくなったり、0に近づいたりするケースを考慮しておくことも重要です。
その状況で分岐が必要なら、あらかじめ条件式を組んでおくのが無難です。

数値処理が続く大規模なコードでは、どこでabs()を使うかを計画的に組むことでバグを減らせます。
途中で型が変わらないように整理しておくと、後々のトラブルを防ぎやすくなります。

まとめ

ここまで、Pythonで絶対値を取得する方法について、abs()関数とfabs()関数の特徴から実務での具体的な使い所まで詳しく解説してきました。

  • abs()関数はPythonの組み込み関数で、整数・浮動小数点数・複素数など幅広く対応できる
  • fabs()関数はmathモジュールに含まれる関数で、常に浮動小数点数を返すという特徴を持つ
  • 距離計算や誤差測定、金融の値動きの分析など、いろいろな実務シーンで絶対値は役に立つ
  • データ型や文字列を含む場合のエラーに注意しながら、用途に応じてabs()とfabs()を使い分ける

プログラミングに慣れていない方でも、数値の符号を無視して大きさだけを取りたいときは「abs()で取れるんだ」というイメージを持っていただければ十分です。
さらにもう少し詳しい数値解析や科学技術計算、金融工学などを扱うときにはfabs()のような専門的な関数も視野に入れると、作業の効率が上がるかもしれません。

絶対値はあらゆるアルゴリズムの基礎になりうる要素です。
これを機にabs()の使い方をしっかり押さえて、実務や学習で役立ててみてください。

Pythonをマスターしよう

この記事で学んだPythonの知識をさらに伸ばしませんか?
Udemyには、現場ですぐ使えるスキルを身につけられる実践的な講座が揃っています。