2019.4.24
1、字串的操作:
for line in fr.readlines():
curline = line.strip().split('\t')
#str.strip(chars) :用於移除字串頭尾指定的字元chars(預設為空格或換行符)或字串行;該方法只能刪除開頭或是結尾的字元,不能刪除中間部分的字元。
#str.split(chars): 將str資料由chars分隔開;
2、map函式的用法:
map(?,l)的作用:
1)對l中的每乙個元素進行操作;
2)list(map(?,l),是對l中的每乙個元素都進行?操作;
3)匿名函式,當我們對?這部分不想單獨寫乙個函式的時候就可以用lambda來寫出乙個函式;其中 : 號的作用是將引數與函式體分開,之後進行傳參操作就可以了;
l = [1,2,3,4]
l1 = [11,22,33,44]
def fun(x):
return x*2
m1 = map(fun,l)
li1 = list(map(fun,l))
print(m1)
print(li1)
m2 = map(float,l)
li2 = list(map(float,l))
print(m2)
print(li2)
m3 = map(int,l)
li3 = list(map(int,l))
print(m3)
print(li3)
l4 = list(map(lambda x:x**2, l))
print(l4)
l5 = list(map(lambda x, y:x+y, l, l1))
print(l5)
3、numpy.linalg()函式
#numpy.linalg模組包含線性代數的函式。使用這個模組,可以計算逆矩陣、求特徵值、解線性方程組以及求解行列式等。
linalg.inv() 矩陣求逆
linalg.det() 矩陣求行列式(行列式的意義)
linalg.matrix_rank(matrix, tol) 利用svd的方法求解矩陣的秩(若值小於tol,認為是零)
linalg.eig() 計算特徵值與特徵向量
# from numpy import *
import numpy as np
#------------------------demo-------------
# 建立矩陣---
a = np.mat("1 1 2;1 2 3;4 5 6")
print('得到的矩陣:\n',a)
#計算逆矩陣---
a_inv = np.linalg.inv(a)#矩陣必須為方陣且可逆,否則會出現numpy.linalg.linalgerror: singular matrix錯誤
print('矩陣的逆:\n',a_inv)
#檢查原矩陣與逆矩陣相乘結果是否為單位矩陣
print('驗證矩陣逆\n',a*a_inv)
#求解線性方程組 a*x = b---
b = np.array([3,4,5])
x = np.linalg.solve(a,b)
print('方程a*x = b的解:\n',x)
#使用dot函式檢查求得的解是否正確
print('驗證解是否正確:\n',np.dot(a,x))
#特徵值和特徵向量---
# numpy.linalg模組中,ei**als函式可以計算矩陣的特徵值,而eig函式可以返回乙個包含特徵值和對應的特徵向量的元組
b = np.mat("3,4,5;6,7,8;9,1,2")
b_eig = np.linalg.ei**als(b)
print('矩陣的特徵解:\n',b_eig)
b1,b2 = np.linalg.eig(b)
print('矩陣的特徵值:\n',b1,'\n矩陣的特徵向量:\n',b2)
#使用dot函式驗證求得的解是否正確 b*x= lamda*x
for i in range(len(b1)):
print("left:",np.dot(b,b2[:,i]))#b*x
print("right:",b1[i]*b2[:,i])#lamda*x
#奇異值分解---
# numpy.linalg模組中的svd函式可以對矩陣進行奇異值分解。
# 該函式返回3個矩陣——u、sigma和v,其中u和v是正交矩陣,sigma包含輸入矩陣的奇異值。
u,sigma,v = np.linalg.svd(b,full_matrices=false)
print("奇異值分解u:\n",u)
print("奇異值分解sigma:\n",sigma)
print("奇異值分解v:\n",v)
# 使用diag函式生成完整的奇異值矩陣。將分解出的3個矩陣相乘
print ("驗證奇異值分解:\n",u * np.diag(sigma) * v)
#廣義逆矩陣---
# 使用numpy.linalg模組中的pinv函式進行求解,
# 注:inv函式只接受方陣作為輸入矩陣,而pinv函式則沒有這個限制
b1 = np.mat("3,4,5;6,7,8")
b1_pinv = np.linalg.pinv(b1)
print("計算廣義逆矩陣:\n",b1_pinv)
#將廣義逆矩陣與原矩陣相乘
print("計算原矩陣:\n",b1*b1_pinv)
#計算行列式 ;使用det函式計算行列式
print ("計算b矩陣行列式:\n",np.linalg.det(b))
4、 聚類演算法之高斯混合模型
高斯混合模型 gmm gaussian mixture model 統計學習的模型有兩種,一種是概率模型,一種是非概率模型。所謂概率模型,是指訓練模型的形式是p y x 輸入是x,輸出是y,訓練後模型得到的輸出不是乙個具體的值,而是一系列的概率值 對應於分類問題來說,就是輸入x對應於各個不同y 類 ...
高斯混合聚類
高斯混合聚類 將高斯分布 貝葉斯公式 極大似然法 em 估計 的思路混合在這一種方法中。高斯混合聚類是從概率的角度對樣本進行聚類的,而且這個概率是連續概率。先驗概率 指根據以往經驗和分析得到的概率。類條件概率 指已知乙個條件下,結果發生的概率。後驗概率 判斷結果的發生是由哪個原因引起的概率。一元高斯...
混合高斯模型聚類
翻譯自matlab幫助。混合高斯模型簡介 混合高斯模型基於多變數正 態分布。類gmdistribution通過使用em演算法來擬合資料,它基於各觀測量計算各成分密度的後驗概率。高斯混合模型常用於聚類,通過選擇成分最大化後驗概率來完成聚類。與k means聚類相似,高斯混合模型也使用迭代演算法計算,最...