Fai esponenti in Python

Rayven Esplanada 10 ottobre 2023
  1. Usa l’operatore ** per eseguire l’esponente in Python
  2. Usa pow() o math.power() per fare esponente in Python
  3. Usa numpy.np() per fare esponente in Python
  4. Confronta i tempi di esecuzione per ciascuna soluzione
Fai esponenti in Python

Questo tutorial dimostrerà come eseguire esponenziali in Python.

esponente python

In matematica, l’elevamento a potenza è un’operazione in cui un numero viene moltiplicato più volte con se stesso.

Python fornisce operazioni e funzioni integrate per aiutare a eseguire l’elevazione a potenza.

Usa l’operatore ** per eseguire l’esponente in Python

La maggior parte degli sviluppatori sembra pensare che il simbolo del caret ^ sia l’operatore per ottenere la potenza di un numero perché il caret è usato come simbolo per gli esponenti in matematica. Tuttavia, nella maggior parte dei linguaggi di programmazione, il simbolo del caret è riservato all’operatore xor bit per bit.

In Python, l’operatore esponente è simboleggiato da due asterischi consecutivi ** tra la base e il numero esponente.

La funzionalità dell’operatore esponente integra il comportamento dell’operatore di moltiplicazione *; la differenza è che il secondo operando nell’operatore esponente serve per impostare il numero di volte in cui il primo operando viene moltiplicato per se stesso.

print(5 ** 6)

Per moltiplicare il numero 5 per se stesso 6 volte, usa l’operatore ** tra l’operando di base 5 e l’operando esponente 6.

Produzione:

15625

Testiamo questo operatore su diversi tipi di valori.

Inizializzeremo un numero intero, un numero intero negativo, zero e due valori float minori di 1 e maggiori di 1. Quindi assegneremo numeri interi casuali come loro esponenti.

num1 = 2
num2 = -5
num3 = 0
num4 = 1.025
num5 = 0.5

print(num1, "^12=", num1 ** 12)
print(num2, "^4=", num2 ** 4)
print(num3, "^9999=", num3 ** 9999)
print(num4, "^-3=", num4 ** -3)
print(num5, "^8=", num5 ** 8)

Produzione:

2^12= 4096
-5^4= 625
0^9999= 0
1.025^-3= 0.928599410919749
0.5^8= 0.00390625

Usa pow() o math.power() per fare esponente in Python

Un altro modo per fare esponente in Python è usare la funzione pow() progettata per esponenziare i valori dati la base e l’esponente. Il modulo math ha anche la sua implementazione di pow() per lo stesso scopo.

Entrambe queste funzioni hanno 2 argomenti, il primo argomento è per il numero di base e il secondo è per l’esponente.

Proviamo a chiamare entrambe le funzioni più volte con gli stessi argomenti in modo da poter confrontare i loro output.

import math

print(pow(-8, 7))
print(math.pow(-8, 7))

print(pow(2, 1.5))
print(math.pow(2, 1.5))

print(pow(4, 3))
print(math.pow(4, 3))

print(pow(2.0, 5))
print(math.pow(2.0, 5))

Produzione:

-2097152
-2097152.0
2.8284271247461903
2.8284271247461903
64
64.0
32.0
32.0

L’unica differenza nei risultati è math.pow() restituisce sempre un valore float anche se vengono passati interi argomenti, mentre pow() restituirà solo float se c’è almeno un float discussione.

Usa numpy.np() per fare esponente in Python

Il modulo NumPy ha anche la sua funzione power() per l’elevamento a potenza. power() accetta gli stessi argomenti delle funzioni pow(), dove il primo argomento è il valore base e il secondo argomento è il valore esponente.

Per usare NumPy, dovremmo installarlo tramite pip o pip3.

  • Python 2:
pip install numpy
  • Python 3:
pip3 install numpy

Stampiamo lo stesso insieme di esempi in pow() usando numpy.power().

print(np.power(-8, 7))
print(np.power(2, 1.5))
print(np.power(4, 3))
print(np.power(2.0, 5))

Produzione:

-2097152
2.8284271247461903
64
32.0

power() produce lo stesso output della funzione Python incorporata pow() dove restituirà un numero intero se non ci sono argomenti float.

Confronta i tempi di esecuzione per ciascuna soluzione

Confrontiamo il tempo impiegato da queste 3 funzioni e l’operatore ** per funzionare con un elevato valore di esponente. Per le funzioni di temporizzazione, importeremo il modulo timeit per stampare ogni runtime delle soluzioni.

Il valore della base sarà 2 e il valore dell’esponente sarà 99999.

import numpy as np
import math
import time

start = time.process_time()
val = 2 ** 99999
print("** took", time.process_time() - start, "ms")

start = time.process_time()
val = pow(2, 99999)
print("pow() took", time.process_time() - start, "ms")

start = time.process_time()
val = np.power(2, 99999)
print("np.power() took", time.process_time() - start, "ms")

start = time.process_time()
val = math.pow(2, 99999)
print("math.pow() took", time.process_time() - start, "ms")

Produzione:

** took 0.0006959999999999744 ms

pow() took 0.00039000000000000146 ms

np.power() took 1.6999999999989246e-05 ms

Traceback (most recent call last):
  File "/Users/rayven/python/timeit.py", line 15, in <module>
    val = math.pow(2,99999)
OverflowError: math range error

La cosa più ovvia da notare è che math.pow() risulta in un OverflowError. Ciò significa che math.pow() non può supportare esponenti di grande valore, molto probabilmente a causa del modo in cui questo modulo ha implementato l’elevamento a potenza.

La differenza tra gli altri 3 metodi è banale, ma da questo esempio, np.power() è la funzione più veloce per eseguire l’elevamento a potenza.

E se provassimo a ridurre l’esponente a 9999? Vediamo cosa produce math.pow().

** took 1.0000000000010001e-05 ms
pow() took 4.000000000004e-06 ms
np.power() took 2.0000000000020002e-05 ms
math.pow() took 2.9999999999752447e-06 ms
Rayven Esplanada avatar Rayven Esplanada avatar

Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.

LinkedIn

Articolo correlato - Python Math