Python >> Python-zelfstudie >  >> Python

Python Absolute waarde:laten we wat wiskunde doen!

In deze tutorial zullen we de absolute waarde van numerieke typen in Python berekenen. We zullen ook kijken naar verschillende bibliotheken die het mogelijk maken om het te berekenen.

Om de absolute waarde van een getal in Python te berekenen, kun je de ingebouwde functie abs() gebruiken. Het argument dat aan de abs-functie wordt doorgegeven, kan een geheel getal, een float of een complex getal zijn. Python-modules zoals NumPy en Pandas maken het ook mogelijk om de absolute waarde te berekenen voor complexere datastructuren.

Het is tijd voor wat voorbeelden!

De Absolute Waarde-functie in Python

De eenvoudigste manier om de absolute waarde van een getal in Python te krijgen is met de ingebouwde functie abs() .

Laten we wat Python-code schrijven die een getal als invoer neemt en de absolute waarde van dat getal retourneert:

number = int(input("Please insert a number: "))
print("The absolute value of the number is {}".format(abs(number))) 

In dit geval zijn we ervan uitgegaan dat ons programma gehele getallen verwacht. De uitvoer is:

Please insert a number: -4
The absolute value of the number is 4

Open nu de Python-shell om de absolute waarde te zien die wordt geretourneerd door de functie abs() wanneer we er verschillende typen getallen aan doorgeven.

Geheel getal

>>> abs(4)
4
>>> abs(-4)
4 

Drijvende kommanummer

>>> abs(4.15)
4.15
>>> abs(-4.15)
4.15 

Je kunt zien dat we met int- en float-nummers ofwel een int of een float zonder teken terugkrijgen.

Absolute waarde van een complex getal

Dit is wat er gebeurt met een complex getal...

>>> abs(3+2j)
3.605551275463989
>>> abs(3-2j)
3.605551275463989
>>> abs(3-4j)
5.0
>>> abs(3+4j)
5.0 

De absolute waarde die wordt geretourneerd voor een complex getal is de grootte ervan. De grootte is de afstand van het complexe getal vanaf de oorsprong in het complexe vlak.

Merk op hoe de grootte van een complex getal een decimaal deel kan hebben dat anders is dan nul of niet.

In een van de volgende secties zullen we een wiskundige Python-bibliotheek zien die je ook kunt gebruiken om de absolute waarde te berekenen.

Absolute waarde van de elementen in een Python-lijst

Laten we naar iets interessanters gaan...

Ik wil een manier vinden om de absolute waarde te berekenen van alle elementen die bij een Python-lijst horen.

Hoe kunnen we het doen?

Er zijn een paar manieren waarop we kunnen beginnen met een basis-for-lus:

>>> numbers = [1, -3, -3.14, 6+3j, -11, 5]
>>> abs_numbers = []
>>> for number in numbers:
...     abs_numbers.append(abs(number))
... 
>>> abs_numbers
[1, 3, 3.14, 6.708203932499369, 11, 5] 

Ik heb een nieuwe lijst gemaakt en de absolute waarde van elk nummer eraan toegevoegd.

Makkelijk... en er zijn betere manieren om het te doen.

Kaartfunctie

Voer het volgende uit in de Python-shell om de handleiding voor de kaartfunctie te controleren:

>>> help(map)

In dit geval zal de iterabele een lijst met getallen zijn:

>>> numbers = [1, -3, -3.14, 6+3j, -11, 5]
>>> map(abs, numbers)
<map object at 0x10d9d5050>
>>> list(map(abs, numbers))
[1, 3, 3.14, 6.708203932499369, 11, 5] 

Wanneer we de map-instructie uitvoeren, krijgen we een kaartobject . terug . Om een ​​lijst terug te krijgen, moeten we deze naar een lijst casten met de functie list() .

Lijst begrip

En hier is hoe we een lijstbegrip kunnen gebruiken om een ​​lijst te krijgen die absolute waarden van al deze getallen bevat.

>>> numbers = [1, -3, -3.14, 6+3j, -11, 5]
>>> [abs(number) for number in numbers]
[1, 3, 3.14, 6.708203932499369, 11, 5] 

Leuk!

Lambda

Ik wil hier ook een lambda voor proberen. De lambda verandert het teken van een getal als het negatief is:

>>> list(map(lambda x: -x if x < 0 else x, numbers))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 1, in <lambda>
TypeError: '<' not supported between instances of 'complex' and 'int' 

Helaas werkt dit niet met onze huidige lijst die een complex getal bevat.

Laten we deze aanpak testen met een lijst die geen complexe getallen bevat:

>>> numbers2 = [1, -3, -3.14, -11, 5]
>>> list(map(lambda x: -x if x < 0 else x, numbers2))
[1, 3, 3.14, 11, 5] 

Ziet er goed uit deze keer 🙂

Absolute waarde van de elementen in een tuple of een set

Ik ben er vrij zeker van dat ik de absolute waarde van de elementen in een Python-tupel of set kan berekenen met een van de technieken die in de vorige sectie zijn gebruikt.

Laten we het bevestigen voor een tuple eerst…

>>> numbers = (1, -3, -3.14, 6+3j, -11, 5)
>>> tuple(map(abs, numbers))
(1, 3, 3.14, 6.708203932499369, 11, 5) 

En hier is hetzelfde voor een Python set :

>>> numbers = {1, -3, -3.14, 6+3j, -11, 5}
>>> set(map(abs, numbers))
{1, 3.14, 3, 5, 6.708203932499369, 11} 

Let op het verschil in de volgorde van de elementen van de verzameling die we hebben berekend. Dit komt doordat een set een ongeordende verzameling is .

Bereken de absolute waarde met NumPy

Een alternatief voor de ingebouwde functie abs() om de absolute waarde van een getal te berekenen, is de NumPy-module.

>>> import numpy as np
>>> np.abs(-2)
2
>>> np.abs(-3.14)
3.14
>>> np.abs(6+3j)
6.708203932499369 

Tot nu toe werkt dit als de ingebouwde methode, dus wat heeft het voor zin om dit in plaats daarvan te gebruiken?

We kunnen ook een lijst direct doorgeven aan de NumPy abs() functie...

>>> numbers = [1, -3, -3.14, 6+3j, -11, 5]
>>> np.abs(numbers)
array([ 1.        ,  3.        ,  3.14      ,  6.70820393, 11.        ,
        5.        ])
>>> np.absolute(numbers)
array([ 1.        ,  3.        ,  3.14      ,  6.70820393, 11.        ,
        5.        ]) 

Opmerking :de absolute functie in NumPy is hetzelfde als abs . Het werd eerst geïntroduceerd in NumPy en vervolgens werd de alias abs gemaakt voor de eenvoud.

Nu ben ik benieuwd wat er gebeurt als we een lijst doorgeven aan de ingebouwde abs()-functie:

>>> abs(numbers)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: bad operand type for abs(): 'list' 

Oké, het werkt absoluut niet!

Absolute waarde van een matrix in Python

Aangezien we NumPy in de vorige sectie hebben bekeken, laten we eens kijken of we ook de absolute waarde van de elementen van een matrix kunnen berekenen.

>>> x = np.matrix('1 -2 3-2j; -4.34 5 -6.54')
>>> np.abs(x)
matrix([[1.        , 2.        , 3.60555128],
        [4.34      , 5.        , 6.54      ]]) 

Het werkt ook met een matrix. Best handig!

Absolute waarde voor een Pandas-dataframe

En nu we NumPy hebben gebruikt...

...we hetzelfde kunnen proberen met een Pandas-dataframe?

>>> df = pd.DataFrame({"Int": [1, -3, -6], "Float": [-3.14, -4.56, 5.55], "Complex": [3-2j, -4+3j, -3-9j]})
>>> df
   Int  Float             Complex
0    1  -3.14  3.000000-2.000000j
1   -3  -4.56 -4.000000+3.000000j
2   -6   5.55 -3.000000-9.000000j
>>> np.abs(df)
   Int  Float   Complex
0  1.0   3.14  3.605551
1  3.0   4.56  5.000000
2  6.0   5.55  9.486833 

Het resultaat is een dataframe waarin elk element precies de absolute waarde heeft die we verwachtten.

Wie had gedacht dat we zoveel dingen konden doen met de absolute waarde?

De waarden van een woordenboek sorteren op basis van de absolute waarde

Dit is misschien niet per se iets dat je in de toekomst zult tegenkomen, maar het is een oefening om je Python-vaardigheden te verbeteren.

Hoe kunnen we de elementen van een woordenboek sorteren op basis van de absolute waarde van hun waarden?

>>> my_dict = {'number1': -3, 'number2': -5.45, 'number3': 2, 'number4': -10}

Het eerste dat we nodig hebben is de gesorteerde functie .

Als we gewoon de gesorteerde functie toepassen op het woordenboek, krijgen we de toetsen alfabetisch geordend:

>>> sorted(my_dict)
['number1', 'number2', 'number3', 'number4'] 

Dit is niet wat we willen...

We willen dat die sleutels geordend zijn op basis van de absolute waarde van de waarden die eraan zijn toegewezen in het woordenboek.

Zoals je kunt zien aan de hand van de hulp hierboven, maakt de sorteerfunctie het mogelijk om een ​​sleutel door te geven die kan worden gebruikt als sorteercriterium.

Ten eerste zullen we een lambda-functie definiëren die een woordenboeksleutel als invoer neemt en de absolute waarde retourneert van de woordenboekwaarde die aan die sleutel is gekoppeld.

>>> (lambda key : abs(my_dict[key]))('number1')
3  

In de bovenstaande code heb ik de lambda-functie gedefinieerd en vervolgens heb ik de string 'number1' eraan doorgegeven. Op deze manier heb ik de logica van de lambda getest.

Nu moeten we deze lambda gebruiken als sorteersleutel voor de gesorteerde functie.

>>> my_dict = {'number1': -3, 'number2': -5.45, 'number3': 2, 'number4': -10}
>>> sorted(my_dict, key=lambda key : abs(my_dict[key]))
['number3', 'number1', 'number2', 'number4'] 

Als we de volgorde willen omkeren, kunnen we het omgekeerde argument van de gesorteerde functie op True zetten.

>>> sorted(my_dict, key=lambda key : abs(my_dict[key]), reverse=True)
['number4', 'number2', 'number1', 'number3'] 

Tijdsverschil tussen datums met behulp van de absolute waarde

In je Python-programma wil je misschien het verschil in seconden tussen twee datums berekenen.

Laten we zeggen dat we alleen geïnteresseerd zijn in de absolute waarde van het verschil tussen de twee.

>>> import datetime, time
>>> date1 = datetime.datetime.now()
>>> time.sleep(10)
>>> date2 = datetime.datetime.now()
>>> delta = abs(date1 - date2)
>>> delta
datetime.timedelta(seconds=25, microseconds=287887)
>>> delta = abs(date2 - date1)
>>> delta
datetime.timedelta(seconds=25, microseconds=287887) 

De datetime-module gebruiken we krijgen de huidige datum op twee verschillende momenten (let op de 10 seconden slaap die wat extra vertraging toevoegt).

We krijgen hetzelfde resultaat als we het verschil tussen de twee deltawaarden berekenen, omdat we de absolute waarde op beide verschillen hebben toegepast.

Dit is wat we krijgen zonder de absolute waarde toe te passen:

>>> delta = date1 - date2
>>> delta
datetime.timedelta(days=-1, seconds=86374, microseconds=712113)
>>> delta = date2 - date1
>>> delta
datetime.timedelta(seconds=25, microseconds=287887) 

Conclusie

In deze tutorial hebben we een aantal manieren behandeld om de absolute waarde te berekenen in Python met behulp van de Python-standaardbibliotheek en modules zoals NumPy en Pandas.

We hebben ook de flexibiliteit gezien die Python biedt om hetzelfde probleem op meerdere manieren op te lossen.

Ik hoop dat je hebt gevonden wat je zocht en laat het me weten in de reacties als je iets anders in dit artikel wilt zien dat ik nog niet heb behandeld.