Fai esponenti in Python
-
Usa l’operatore
**
per eseguire l’esponente in Python -
Usa
pow()
omath.power()
per fare esponente in Python -
Usa
numpy.np()
per fare esponente in Python - Confronta i tempi di esecuzione per ciascuna soluzione
Questo tutorial dimostrerà come eseguire esponenziali in 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
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