#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)
---------------------------------------------------------------------------
NameError                                 Traceback (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]范圍內。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM