Python:基本運算、基本函式(包括複數)、Math模組、NumPy模組
基本運算
x**2 : x^2
若x是mat矩陣,那就表示x內每個元素求平方- inf:表示正無窮
- 邏輯運算子:and,or,not
基本函式
字典的get方法
a.get(k,d)
get相當於一條if…else…語句。若k在字典a中,則返回a[k];若k不在a中,則返回引數d。
l = {5:2,3:4}
l.get(3,0) 返回值是4;
l.get(1,0) 返回值是0;
type函式:返回資料型別
type(x):返回x的型別
type(x)._name_:返回該型別的字串表示
len函式:獲得list或str的長度
reload函式:將之前匯入過的模組重新載入進來
對複數的處理
complex(a,b) #建立a+bj的複數
complex('2+1j') #將字串形式的複數轉成複數
real(x) #取複數x的實部
imag(x) #取複數x的虛部
abs(x) #求x的模
next函式
本函式是返回迭代器的下一個元素的值。
在Python 3中,只能使用next()函式(試圖呼叫.next()方法會觸發AttributeError)。
my_generator = (letter for letter in 'abcdefg')
next(my_generator)
>>>'a'
math模組
Python內建math模組,提供大部分常用數學運算函式。
使用 math 模組
math 模組是標準庫中的,所以不用安裝,可以直接使用。使用方法是:
>>> import math
常用函式
ceil(x) 取頂
floor(x) 取底
fabs(x) 取絕對值
factorial (x) 階乘
hypot(x,y) 計算sqrt(x*x+y*y)
pow(x,y) x的y次方
sqrt(x) 開平方
log(x)
log10(x)
trunc(x) 截斷取整數部分
isnan (x) 判斷是否NaN(not a number)
degrees (x) 弧度轉角度
radians(x) 角度轉弧度
sin(x)
cos(x)
tan(x)
asin(x)
acos(x)
atan(x)
#例子:
a=math.atan(x) #計算x的反正切值
seta=math.degrees(a) #將弧度製表示的a轉換成角度製表示的seta
Numpy模組
模組的匯入
from numpy import array/mat/shape/*
mm=array([1,2,3]) //
ss=mat([1,2,3])
Numpy中,mat必須是2維的,但是array可以是多維的(1D,2D,3D····ND). Matrix是Array的一個小的分支,包含於Array。所以matrix 擁有array的所有特性。
在numpy中matrix的主要優勢是:相對簡單的乘法運算子號。例如,a和b是兩個matrices,那麼a*b,就是矩陣積。
若a=mat([1,2,3])
是矩陣,則 a.A 則轉換成了陣列,反之,a.M則轉換成了矩陣
陣列array
陣列array的引數是列表,有
a=array([1,2,3])
b=array([[1,2,3],[4,5,6]])
它有以下一些屬性:
a.ndim #秩,是陣列軸的個數
a.shape #陣列的維度
a.size #元素的總個數
a.dtype #一個用來描述陣列中元素型別的物件
a.dtype.name #返回字串形式的型別名
常用的Numpy運算
取矩陣中的某一行 ss[1,:]
或該行的某兩列 ss[1,0:2]
將陣列轉換成矩陣 randMat=mat(random.rand(4,4))
矩陣求逆 randMat.I
單位陣 eye(4)
零矩陣 zeros((x,y))
建立x行y列的零矩陣
最大值和最小值 a.max(),a.min()
,而a.max(0)
表示按列選取每列的最大值
最大/小元素的下標 a.argmax(),a.argmin()
#作為方法
x.sum() #所有元素相加
x.sum(axis=0) #按列相加
x.sum(axis=1) #按行相加
#作為函式
sum(a,axis=0)
ss.mean()
mean(a,axis=0(或1)) #按列或行求均值
var(a)
var(a,axis=0(或1)) #按列或行求方差
std(a)
std(a,axis=0(或1)) #按列或行求標準差
ss.T或ss.transpose() #轉置
shape的用法
- shape作為函式,可以讀取矩陣的長度,它的輸入引數可以是一個矩陣。例如:
shape(3):一個單獨的數字,返回值為空
shape([1]):一維矩陣[1]返回值為(1L,)
shape([[1],[2]]) :二維矩陣[[1],[2]],返回兩個值
- shape還可以作為矩陣的方法被呼叫,如
e=eye(3)
e.shape
>>(3L,3L)
e.shape[0]//讀取第一維度的長度
>>3L
tile函式:重複某個陣列
a=[0,1,2]
b=tile(a,2)
>>>b=([0,1,2,0,1,2])
b=tile(a,(2,1))
>>>b=([[0,1,2],
[0,1,2]])
b=tile(a,(1,2))
>>>b=([[0,1,2],[0,1,2]])
range函式:構造等差數列
range(1,5):代表從1到5,不包含5:[1,2,3,4]
range(1,5,2):代表從1到5,間隔為2,不包含5:[1,3]
range(5):代表從0到5,不包含5:[0,1,2,3,4]
sort,sorted,argsort函式:排序
x.sort()
:
只可以應用於list物件,且是原地排序,排序過後list發生改變。
x.argsort()
:
得到矩陣每行的升序排序
sorted函式
排序並生成新的容器
一. 如果是普通的列表,可以直接使用sorted,如
a=[1,4,2,3,7]
b=sorted(a)
二. 如果是由元祖構成的元祖列表,就比較複雜,假設有
L=[('b',2),('a',1),('c',3)]
有兩種寫法或格式
- cmp格式
sorted(L,cmp=lambda x,y:cmp(x[1],y[1])
- key格式
sorted(L,key=lambda x:x[1])
其中還有個reverse可選項,reverse=True 則輸出倒序,reverse=False 則輸出正序。
三. 如果是字典,那麼格式也略複雜
假設有dic={'a':31,'bc':52,'c':3,'33':56}
在python 3中,可以寫成
sorted(dic.items(),key=lambda d:d[1],reserve=False)
其中,dic.items
返回字典鍵值對的元祖集合set
還可以寫成
sorted(dic.items(),key=operator.itemgetter(1),reserve=False)
其中,operator.itemgetter()
函式可以獲取物件的某些維的資料
array的形狀操作
a.ravel() #展平成一維陣列,a.flatten() 與之類似
a.reshape(m,n) #返回一個新陣列,但原陣列本身不變
a.resize(m,n) #返回一個新陣列的同時也改變原陣列本身
其他通用函式或方法
a.copy() #對元素進行復制
c=sqrt(a) #計算元素的平方根
c=exp(a)
c=abs(a)
c=add(a,b) #a和b對應元素相加
c=subtract(a,b) #a和b對應元素相減
c=multiply(a,b) #a和b對應元素相乘
c=divide(a,b) #a和b對應元素相除
nonzero(a) #返回a中所有不為零的元素的下標位置
對array和matrix而言,(a>3)或(a==3)
返回一個同類型的布林值
例如:
a=array([1,2,3])
b=(a==2)
>>>b=array([False,True,False])
Numpy中的線性代數子庫linalg
linalg中包含了許多線性代數的方法
linalg.det(a) #求a的行列式
linalg.inv(a) #求a的逆矩陣