Get Absolute Values in Python: abs(), math.fabs()
In Python, you can get the absolute value of a number using either the built-in abs()
function or the math
module's fabs()
function.
Get Absolute Values of Integers with abs()
Passing an integer (int
) to abs()
returns its absolute value as an int
.
print(abs(100))
# 100
print(abs(-100))
# 100
print(type(abs(100)))
# <class 'int'>
Get Absolute Values of Floating-Point Numbers with abs()
Passing a floating-point number (float
) to abs()
returns its absolute value as a float
.
print(abs(1.23))
# 1.23
print(abs(-1.23))
# 1.23
print(type(abs(1.23)))
# <class 'float'>
Get Absolute Values of Complex Numbers with abs()
In Python, you can represent complex numbers using j
as the imaginary unit.
Passing a complex number (complex
) to abs()
returns its absolute value (also known as its modulus or magnitude) as a float
.
print(abs(1 + 1j))
# 1.4142135623730951
print(abs(3 + 4j))
# 5.0
print(type(abs(3 + 4j)))
# <class 'float'>
The __abs__()
Special Method
When abs()
is called, it internally invokes the object's special method __abs__()
. In other words, abs(x)
is equivalent to x.__abs__()
.
print((-100).__abs__())
# 100
print((-1.23).__abs__())
# 1.23
print((3 + 4j).__abs__())
# 5.0
If you try to use abs()
with an object that doesn't implement __abs__()
, such as a list, you'll get a TypeError
.
l = [-2, -1, 0, 1, 2]
print(hasattr(l, '__abs__'))
# False
# print(abs(l))
# TypeError: bad operand type for abs(): 'list'
You can use the built-in hasattr()
function to check if an object has a specific attribute or method.
You can also implement __abs__()
in your custom classes to define how abs()
should work with them. Here's a simple example where abs()
always returns 100
:
class MyClass:
def __abs__(self):
return 100
mc = MyClass()
print(abs(mc))
# 100
Convert List Elements to Absolute Values
To convert all elements in a list to their absolute values, you can use a list comprehension with abs()
.
l = [-2, -1, 0, 1, 2]
print([abs(i) for i in l])
# [2, 1, 0, 1, 2]
Alternatively, NumPy's np.abs()
can convert list elements to their absolute values.
Difference Between math.fabs()
and abs()
math.fabs()
also returns the absolute value, but unlike abs()
, it always returns a floating-point number (float
). Even when given an int
, math.fabs()
returns a float
.
import math
print(math.fabs(-100))
# 100.0
print(type(math.fabs(-100)))
# <class 'float'>
print(math.fabs(-1.23))
# 1.23
print(type(math.fabs(-1.23)))
# <class 'float'>
math.fabs()
only supports real numbers. Attempting to use it with a complex number (complex
) will raise a TypeError
.
# print(math.fabs(3 + 4j))
# TypeError: must be real number, not complex
Since math.fabs()
does not rely on __abs__()
, it won't work with custom classes that implement it.
class MyClass:
def __abs__(self):
return 100
mc = MyClass()
# math.fabs(mc)
# TypeError: must be real number, not MyClass