#8 Python數學方法
前言
前幾節瞭解了Python的不同資料型別,有小夥伴會問,不同的資料型別之間是否可以相互轉換?肯定是可以的,本篇博文主要記錄數字型別的轉換,其他型別的相互轉換會在下幾節記錄,Here we go!
一、Python數字型別轉換
通過前幾節,我們知道Python數字的資料型別有:整型、長整型、浮點型、和複數,它們之間是如何轉換的呢?亦或者它們是如何轉換為其他資料型別呢?先來看所有的方法:
int(x [,base ])# 將 x 轉換為一個整數 float(x )# 將 x 轉換到一個浮點數 complex(real [,imag ])# 建立一個複數 str(x )# 將物件 x 轉換為字串 repr(x )# 將物件 x 轉換為表示式字串 eval(str )# 用來計算在字串中的有效Python表示式,並返回一個物件 tuple(s )# 將序列 s 轉換為一個元組 list(s )# 將序列 s 轉換為一個列表 chr(x )# 將一個整數轉換為一個字元 ord(x )# 將一個字元轉換為它的整數值 hex(x )# 將一個整數轉換為一個十六進位制字串 oct(x )# 將一個整數轉換為一個八進位制字串 bin(x)# 將一個整數轉換為一個二進位制字串
我們先來申明一個變數num1 = 6 ,之後用 type() 函式檢視其資料型別,任何資料型別都可以用此函式檢視:
In [103]: num1 = 6 In [104]: type(num1) Out[104]: int
可以看到 num1 預設是 int 型別的,再來建立num2 = 6.6 ,再次檢視其資料型別:
In [105]: num2 = 6.6 In [106]: type(num2) Out[106]: float
可以看到 num2 預設是 float 型別的,也就是說,當在Python中建立一個整數的時候,預設的資料型別為 int ,建立一個小數的時候,預設的資料型別是 float ,建立完後想要修改其資料型別就要用到上面的型別轉換函數了
In [110]: float(num1) Out[110]: 6.0 int 轉換為 float
In [114]: int(6.6) Out[114]: 6 In [115]: int(-5.5) Out[115]: -5 # int函式會把小數位全部抹去,保留整數部分 float 轉換為 int
In [116]: complex(5,8) Out[116]: (5+8j) # complex(實部,虛部),虛部可以省略 建立複數
In [117]: str(5) Out[117]: '5' In [118]: str(6.6) Out[118]: '6.6' 數字轉換為字串
In [123]: s = 'print("Hello,world!")' In [124]: s Out[124]: 'print("Hello,world!")' In [125]: eval(s) Hello,world! # 可以看到將字串執行了 執行字串的有效表示式
In [130]: tuple([1,2,3]) Out[130]: (1, 2, 3) 列表轉換為元組
In [139]: chr(56) Out[139]: '8' # 這裡涉及ASC碼的內容 整數轉換為字元
In [142]: ord('8') Out[142]: 56 # 這裡涉及ASC碼的內容 字元轉換為整數
In [143]: hex(15) Out[143]: '0xf' # 十六進位制的數以 0x 開頭 整數轉換為十六進位制
In [144]: oct(20) Out[144]: '0o24' # 八進位制以 0o 開頭 整數轉換為八進位制
In [145]: bin(5) Out[145]: '0b101' # 二進位制以 0b 開頭 整數轉化為二進位制
二、Python數學方法
說起數學方法,肯定不再是簡單的加減乘除乘方等基礎運算了,數學方法更多是取絕對值、指數運算、對數運算、冪運算,開方運算以及三角函式等,這些方法涉及到的領域也是相當廣闊,這部分也是非常重要的,每個人都應該熟練應用,尤其是想要去做資料方面工作的小夥伴。
math模組和cmath模組
Python中大量的數學方法並沒有在內建函式中,而是在兩個模組中,在使用數學方法之前,必須在Python程式中根據需要匯入math模組或者cmath模組。math模組的物件主要是實數,cmath模組主要面向複數,二者包含的方法基本一致,根據實際使用需求匯入即可,匯入方法:
import math
回車以後如何沒有任何報錯資訊就證明匯入成功了,關於模組的詳細概念會在之後的一節專門講到,這裡就先匯入使用,不去做太多的解釋。
匯入以後,可以檢視其幫助資訊,還記得 help() 函式嗎:
In [146]: import math In [147]: help(math) Help on built-in module math: NAME math DESCRIPTION This module is always available.It provides access to the mathematical functions defined by the C standard. FUNCTIONS acos(...) acos(x) Return the arc cosine (measured in radians) of x. acosh(...) acosh(x) Return the inverse hyperbolic cosine of x. asin(...) asin(x) Return the arc sine (measured in radians) of x. -- More--
可以看到 math 模組的幫助資訊很全很複雜,一頁都展示不完(--- More ---),可以按空格健翻頁或者回車鍵翻一行,Q鍵退出;如果只是想要快速檢視其包含的方法,可以用 dir() 函式:
In [148]: dir(math) Out[148]: ['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc']
In [149]: import cmath In [150]: dir(cmath) Out[150]: ['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atanh', 'cos', 'cosh', 'e', 'exp', 'isclose', 'isfinite', 'isinf', 'isnan', 'log', 'log10', 'phase', 'pi', 'polar', 'rect', 'sin', 'sinh', 'sqrt', 'tan', 'tanh']
可以看到math模組和cmath模組都有大量的方法,並且二者方法基本上一樣,接下來,以math模組為例,詳細的介紹其包含的方法
想要檢視模組裡面具體方法的幫助資訊時,可以用 help() 函式檢視:
In [173]: help(math.exp)# 注意是 math.exp, 不是 math.exp() Help on built-in function exp in module math: exp(...) exp(x) Return e raised to the power of x.
注意:檢視具體方法時,只寫方法名稱即可,不要加括號,否則會報錯!
數學函式
abs(x)# 返回數字的絕對值,如abs(-10) 返回 10 math.ceil(x)# 返回數字的上入整數,如math.ceil(4.1) 返回 5 cmp(x, y)# 如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1 math.exp(x)# 返回e的x次冪(ex),如math.exp(1) 返回2.718281828459045 math.fabs(x)# 返回數字的絕對值,如math.fabs(-10) 返回10.0 math.floor(x)# 返回數字的下舍整數,如math.floor(4.9)返回 4 math.log(x)# 如math.log(math.e)返回1.0,math.log(100,10)返回2.0 math.log10(x)# 返回以10為基數的x的對數,如math.log10(100)返回 2.0 max(x1, x2,...)# 返回給定引數的最大值,引數可以為序列。 min(x1, x2,...)# 返回給定引數的最小值,引數可以為序列。 math.modf(x)# 返回x的整數部分與小數部分,兩部分的數值符號與x相同,整數部分以浮點型表示。 math.pow(x, y)# x**y 運算後的值。 round(x [,n])# 返回浮點數x的四捨五入值,如給出n值,則代表舍入到小數點後的位數。 math.sqrt(x)# 返回數字x的平方根
可以看到,上面有些方法是直接寫出的,如 abs(x) ,而有一些方法前面有 math. ,如 math.exp(x),這其實是有原因的,直接寫出的表示是系統內建函式,不用匯入任何模組就可以使用,而加字首的表示這個方法是這個模組裡面的,必須加字首,否者會報錯,任何模組裡面的方法都要加上這個模組的字首,例如:
In [159]: import math In [160]: exp(2) --------------------------------------------------------------------------- NameErrorTraceback (most recent call last) <ipython-input-160-840a487878a2> in <module> ----> 1 exp(2) NameError: name 'exp' is not defined# 不加字首表示這個方法沒有被定義 In [161]: math.exp(2)# 加上字首就可以正常使用了 Out[161]: 7.38905609893065
上面的方法就不一一舉例了,要注意round(x) ,這個函式執行原理是:四捨六入五湊偶 ,小數位為5的時候要看前一位,前一位是偶數就捨棄,是奇數就進一
三角函式
math.acos(x)# 返回x的反餘弦弧度值。 math.asin(x)# 返回x的反正弦弧度值。 math.atan(x)# 返回x的反正切弧度值。 math.atan2(y, x)# 返回給定的 X 及 Y 座標值的反正切值。 math.cos(x)# 返回x的弧度的餘弦值。 math.hypot(x, y)# 返回歐幾里德範數 math.sqrt(x*x + y*y)。 math.sin(x)# 返回的x弧度的正弦值。 math.tan(x)# 返回x弧度的正切值。 math.degrees(x)# 將弧度轉換為角度,如math.degrees(math.pi/2) , 返回90.0 math.radians(x)# 將角度轉換為弧度
可以看到涉及三角函式的方法都在 math 模組裡面
數字常量
math.pi# 數學常量 pi(圓周率,一般以π來表示) math.e# 數學常量 e,e即自然常數(自然常數)。
兩個最常見的數字常量,圓周率 pi 和自然常數 e 也在 math 模組裡面
In [164]: math.pi Out[164]: 3.141592653589793 In [165]: math.e Out[165]: 2.718281828459045
隨機數函式
隨機函式常作為隨機數發生器使用,大量領域會用到隨機數,Python的隨機數基本上都在 random模組中,具體方法如下:
In [171]: import random In [172]: dir(random) Out[172]: ['BPF', 'LOG4', 'NV_MAGICCONST', 'RECIP_BPF', 'Random', 'SG_MAGICCONST', 'SystemRandom', 'TWOPI', '_BuiltinMethodType', '_MethodType', '_Sequence', '_Set', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_acos', '_ceil', '_cos', '_e', '_exp', '_inst', '_log', '_pi', '_random', '_sha512', '_sin', '_sqrt', '_test', '_test_generator', '_urandom', '_warn', 'betavariate', 'choice', 'expovariate', 'gammavariate', 'gauss', 'getrandbits', 'getstate', 'lognormvariate', 'normalvariate', 'paretovariate', 'randint', 'random', 'randrange', 'sample', 'seed', 'setstate', 'shuffle', 'triangular', 'uniform', 'vonmisesvariate', 'weibullvariate']
其主要函式功能:
random.choice(seq)# 從序列的元素中隨機挑選一個元素,比如random.choice(range(10)),從0到9中隨機挑選一個整數。 random.randrange ([start,] stop [,step])# 從指定範圍內,按指定基數遞增的集合中獲取一個隨機數,基數預設值為1 random.random()# 隨機生成下一個實數,它在[0,1)範圍內。 random.seed([x])# 改變隨機數生成器的種子seed。如果你不瞭解其原理,你不必特別去設定seed,Python會幫你選擇seed。 random.shuffle(lst)# 將序列的所有元素隨機排序 random.uniform(x, y)# 隨機生成下一個實數,它在[x,y]範圍內。