Python中非常實(shí)用的Math模塊函數(shù)教程詳解
由于該math模塊與 Python 版本一起打包,因此您不必單獨(dú)安裝它,直接導(dǎo)入:
import math
math模塊常數(shù)
Pythonmath模塊提供了多種預(yù)定義常量。訪問這些常量提供了幾個優(yōu)點(diǎn)。一方面,您不必手動將它們硬編碼到您的應(yīng)用程序中,這為您節(jié)省了大量時間。另外,它們在整個代碼中提供一致性。該模塊包括幾個著名的數(shù)學(xué)常數(shù)和重要值:
圓周率π
Tau (τ)
歐拉數(shù)e
無限
不是數(shù)字 (NaN)
1. 圓周率
Pi (π) 是圓的周長 ( c ) 與其直徑 ( d )的比值:
π = c/d
對于任何圓,該比率始終相同。
Pi 是一個無理數(shù),這意味著它不能表示為一個簡單的分?jǐn)?shù)。因此,pi 的小數(shù)位數(shù)是無限的,但可以近似為 22/7,即 3.141。
您可以按如下方式訪問 pi:
>>> math.pi 3.141592653589793
如您所見,在 Python 中 pi 值保留為小數(shù)點(diǎn)后十五位。提供的位數(shù)取決于底層 C 編譯器。Python 默認(rèn)打印前 15 位數(shù)字,并math.pi始終返回一個浮點(diǎn)值。
那么 pi 可以通過哪些方式對您有用呢?您可以使用 2π r計(jì)算圓的周長,其中r是圓的半徑:
>>> r = 3 >>> circumference = 2 * math.pi * r >>> f"Circumference of a Circle = 2 * {math.pi:.4} * {r} = {circumference:.4}" 'Circumference of a Circle = 2 * 3.142 * 3 = 18.85'
您可以使用它math.pi來計(jì)算圓的周長。您還可以使用公式 π r ²計(jì)算圓的面積,如下所示:
>>> r = 5 >>> area = math.pi * r * r >>> f"Area of a Circle = {math.pi:.4} * {r} * {r} = {area:.4}" 'Area of a Circle = 3.142 * 5 * 5 = 78.54'
2. Tau (τ)
Tau (τ) 是圓的周長與其半徑的比值。這個常數(shù)等于 2π,或大約 6.28。與 pi 一樣,tau 是一個無理數(shù),因?yàn)樗皇?pi 乘以 2。
許多數(shù)學(xué)表達(dá)式使用 2π,而使用 tau 可以幫助簡化方程。例如,我們可以用 tau 代替 tau 并使用更簡單的方程 τ r,而不是用 2π r計(jì)算圓的周長。
然而,使用 tau 作為圓常數(shù)仍存在爭議。您可以根據(jù)需要自由使用 2π 或 τ。
您可以使用 tau 如下:
>>> math.tau 6.283185307179586
像math.pi,math.tau返回十五位數(shù)字并且是一個浮點(diǎn)值。您可以使用 tau 計(jì)算具有 τ r的圓的周長,其中r是半徑,如下所示:
>>> r = 3 >>> circumference = math.tau * r >>> f"Circumference of a Circle = {math.tau:.4} * {r} = {circumference:.4}" 'Circumference of a Circle = 6.283 * 3 = 18.85'
您可以使用math.tau代替2 * math.pi來整理包含表達(dá)式 2π 的方程。
3. 歐拉數(shù)
歐拉數(shù) ( e ) 是一個常數(shù),它是自然對數(shù)的底數(shù),自然對數(shù)是一種常用于計(jì)算增長率或衰減率的數(shù)學(xué)函數(shù)。與 pi 和 tau 一樣,歐拉數(shù)是一個具有無限小數(shù)位的無理數(shù)。e的值通常近似為 2.718。
歐拉數(shù)是一個重要的常數(shù),因?yàn)樗性S多實(shí)際用途,例如計(jì)算人口隨時間的增長或確定放射性衰變率。您可以從math模塊中訪問歐拉數(shù),如下所示:
>>> math.e 2.718281828459045
4. 無限
無窮大不能由數(shù)字定義。相反,它是一個數(shù)學(xué)概念,代表永無止境或無限的事物。無窮大可以朝任一方向發(fā)展,正向或負(fù)向。
當(dāng)您想將給定值與絕對最大值或最小值進(jìn)行比較時,您可以在算法中使用無窮大。
Python中正無窮大和負(fù)無窮大的取值如下:
>>> f"Positive Infinity = {math.inf}" 'Positive Infinity = inf' >>> f"Negative Infinity = {-math.inf}" 'Negative Infinity = -inf'
無窮大不是數(shù)值。相反,它被定義為math.inf. Python 在 3.5 版中引入了這個常量,相當(dāng)于float(“inf”):
>>> float("inf") == math.inf True
既float(“inf”)和math.inf表示無窮大的概念,使得math.inf大于任何數(shù)值:
>>> x = 1e308 >>> math.inf > x True
上面代碼中,math.inf大于x10 308(浮點(diǎn)數(shù)的最大大?。┑闹?,為雙精度數(shù)。
同樣,-math.inf小于任何值:
>>> y = -1e308 >>> y > -math.inf True
負(fù)無窮小于 的值y,即 -10 308。沒有數(shù)字可以大于無窮大或小于負(fù)無窮大。這就是為什么數(shù)學(xué)運(yùn)算 withmath.inf不會改變無窮大的值:
>>> math.inf + 1e308 inf >>> math.inf / 1e308 inf
5. 不是數(shù)字
不是數(shù)字或 NaN 并不是真正的數(shù)學(xué)概念。它起源于計(jì)算機(jī)科學(xué)領(lǐng)域,作為對非數(shù)字值的引用。NaN值可以是由于無效的輸入,或者它可以指示一個變量即應(yīng)該是數(shù)值已經(jīng)由文本字符或符號損壞。
檢查值是否為 NaN 始終是最佳實(shí)踐。如果是,那么它可能會導(dǎo)致您的程序中出現(xiàn)無效值。Python 在 3.5 版本中引入了 NaN 常量。
您可以觀察以下值math.nan:
>>> math.nan nan
NaN 不是數(shù)值。你可以看到,價(jià)值math.nan是nan,相同的值float(“nan”)。
算術(shù)函數(shù)
1. factorial()
僅僅為了得到一個數(shù)的階乘而實(shí)現(xiàn)自己的函數(shù)既耗時又低效。更好的方法是使用math.factorial().。
以下是如何使用 找到數(shù)字的階乘math.factorial():
>>> math.factorial(7) 5040
2. ceil()
math.ceil()將返回大于或等于給定數(shù)字的最小整數(shù)值。如果數(shù)字是正小數(shù)或負(fù)小數(shù),則函數(shù)將返回下一個大于給定值的整數(shù)值。
例如,輸入 5.43 將返回值 6,輸入 -12.43 將返回值 -12。math.ceil()可以將正實(shí)數(shù)或負(fù)實(shí)數(shù)作為輸入值,并且將始終返回整數(shù)值。
當(dāng)您向 輸入整數(shù)值時ceil(),它將返回相同的數(shù)字:
>>> math.ceil(6) 6 >>> math.ceil(-11) -11
3. floor()
floor()將返回小于或等于給定數(shù)字的最接近的整數(shù)值。此函數(shù)的行為與 相反ceil()。例如,輸入 8.72 將返回 8,輸入 -12.34 將返回 -13。floor()可以將正數(shù)或負(fù)數(shù)作為輸入,并返回一個整數(shù)值。
如果您輸入一個整數(shù)值,則該函數(shù)將返回相同的值:
>>> math.floor(4) 4 >>> math.floor(-17) -17
4. trunc()
當(dāng)您得到一個帶小數(shù)點(diǎn)的數(shù)字時,您可能只想保留整數(shù)部分并消除小數(shù)部分。該math模塊有一個被調(diào)用的函數(shù)trunc(),它可以讓你做到這一點(diǎn)。
刪除十進(jìn)制值是一種四舍五入。使用trunc(),負(fù)數(shù)總是向上舍入到零,正數(shù)總是向下舍入到零。
以下是該trunc()函數(shù)如何舍入正數(shù)或負(fù)數(shù):
>>> math.trunc(12.32) 12 >>> math.trunc(-43.24) -43
5. isclose()
例如,采用以下一組數(shù)字:2.32、2.33 和 2.331。當(dāng)你用兩個小數(shù)點(diǎn)來衡量接近度時,2.32 和 2.33 是接近的。但實(shí)際上,2.33 和 2.331 更接近。因此,親近是一個相對的概念。如果沒有某種閾值,您就無法確定接近度。
幸運(yùn)的是,該math模塊提供了一個名為的函數(shù)isclose(),可讓您為接近度設(shè)置自己的閾值或容忍度。它返回True如果兩個數(shù)字是你建立親密,否則返回公差范圍內(nèi)False。
讓我們看看如何使用默認(rèn)容差比較兩個數(shù)字:
- 相對容差或rel_tol是相對于輸入值的幅度被認(rèn)為“接近”的最大差異。這是公差的百分比。默認(rèn)值為 1e-09 或 0.000000001。
- 絕對容差或abs_tol是被視為“接近”的最大差異,而不管輸入值的大小。默認(rèn)值為 0.0。
isclose使用上面的表達(dá)式來確定兩個數(shù)字的接近程度。您可以替換自己的值并觀察任何兩個數(shù)字是否接近。
在以下情況下,6 和 7不接近:
>>> math.isclose(6, 7) False
數(shù)字 6 和 7 不被視為接近,因?yàn)橄鄬θ莶钤O(shè)置為九位小數(shù)。但是,如果你輸入6.999999999和7相同的誤差下,那么他們被認(rèn)為是接近:
>>> math.isclose(6.999999999, 7) True
冪函數(shù)
power 函數(shù)將任何數(shù)字x作為輸入,將x提高到某個n 次冪,然后返回x n作為輸出。
Python 的math模塊提供了幾個與冪的功能。在本節(jié)中,您將了解冪函數(shù)、指數(shù)函數(shù)和平方根函數(shù)。
您可以使用math.pow()來獲取數(shù)字的冪。math.pow() 需要兩個參數(shù),第一個參數(shù)是基值,第二個參數(shù)是冪值。
>>> math.pow(2, 5) 32.0 >>> math.pow(5, 2.4) 47.59134846789696
1. exp()
math模塊提供了一個函數(shù) ,exp()可讓您計(jì)算數(shù)字的自然指數(shù)。
您可以按如下方式找到該值:
>>> math.exp(21) 1318815734.4832146 >>> math.exp(-1.2) 0.30119421191220214
2. 對數(shù)函數(shù)
log()有兩個論點(diǎn)。第一個是強(qiáng)制性的,第二個是可選的。使用一個參數(shù),您可以獲得輸入數(shù)字的自然對數(shù)(以e為底):
>>> math.log(4) 1.3862943611198906 >>> math.log(3.4) 1.2237754316221157
math模塊還提供了兩個單獨(dú)的函數(shù),可讓您計(jì)算以 2 和 10 為底的對數(shù)值:
log2() 用于計(jì)算以 2 為底的對數(shù)值。
log10() 用于計(jì)算以 10 為底的對數(shù)值。
>>> math.log2(math.pi) 1.6514961294723187 >>> math.log(math.pi, 2) 1.651496129472319 >>> math.log10(math.pi) 0.4971498726941338 >>> math.log(math.pi, 10) 0.4971498726941338
其他重要的math模塊功能
math.gcd()
:計(jì)算兩個數(shù)字的最大公約數(shù);
math.fsum()
:在不使用循環(huán)的情況下找到可迭代值的總和;
math.sqrt()
:求任何正實(shí)數(shù)(整數(shù)或小數(shù))的平方根;
math.radians()
:返回度數(shù)輸入的弧度值;
math.degrees()
:將弧度轉(zhuǎn)換為度數(shù);
math.sin()
、math.cos()
、math.tan()
:計(jì)算正弦、余弦、正切;
以上就是Python中非常實(shí)用的Math模塊函數(shù)教程詳解的詳細(xì)內(nèi)容,更多關(guān)于Math模塊函數(shù)的資料請關(guān)注本站其它相關(guān)文章!
版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。