1. python怎樣做高斯擬合
需要載入numpy和scipy庫,若需要做可視化還需要matplotlib(附加dateutil,pytz,pyparsing,cycler,setuptools庫)。不畫圖就只要前兩個。
如果沒有這些庫的話去 http://www.lfd.uci.e/~gohlke/pythonlibs/ 下載對應版本,之後解壓到 C:Python27Libsite-packages。
importnumpyasnp
importpylabasplt
#importmatplotlib.pyplotasplt
fromscipy.optimizeimportcurve_fit
fromscipyimportasarrayasar,exp
x=ar(range(10))
y=ar([0,1,2,3,4,5,4,3,2,1])
defgaussian(x,*param):
returnparam[0]*np.exp(-np.power(x-param[2],2.)/(2*np.power(param[4],2.)))+param[1]*np.exp(-np.power(x-param[3],2.)/(2*np.power(param[5],2.)))
popt,pcov=curve_fit(gaussian,x,y,p0=[3,4,3,6,1,1])
printpopt
printpcov
plt.plot(x,y,'b+:',label='data')
plt.plot(x,gaussian(x,*popt),'ro:',label='fit')
plt.legend()
plt.show()
2. Python數據分析在數學建模中的應用匯總(持續更新中!)
1、Numpy常用方法使用大全(超詳細)
1、Series和DataFrame簡單入門
2、Pandas操作CSV文件的讀寫
3、Pandas處理DataFrame,Series進行作圖
1、Matplotlib繪圖之屬性設置
2、Matplotlib繪制誤差條形圖、餅圖、等高線圖、3D柱形圖
1、層次分析法(AHP)——算數平均值法、幾何平均值法、特徵值法(Python實現,超詳細注釋)
2、Python實現TOPSIS分析法(優劣解距離法)
3、Python實現線性插值和三次樣條插值
4、Python實現線性函數的擬合演算法
5、Python實現統計描述以及計算皮爾遜相關系數
6、Python實現迪傑斯特拉演算法和貝爾曼福特演算法求解最短路徑
3. 詳解Python實現線性插值法
在演算法分析過程中,我們經常會遇到數據需要處理插值的過程,為了方便理解,我們這里給出相關概念和源程序,希望能幫助到您!
已知坐標 (x0, y0) 與 (x1, y1),要求得區間 [x0, x1] 內某一點位置 x 在直線上的y值。兩點間直線方程,我們有
那麼,如何實現它呢?
依據數值分析,我們可以發現存在旁薯遞歸情況
執行結果;
此外,我們也可以對一維線性插值使用指定得庫:numpy.interp
將一維分段線性插值返回給具有給定離散數據點(xp,fp)的函數,該函數在x處求值
檢查: 如果xp沒有增加,則結果是無意義的。
另一方面:線性插值是一種使用線性多項式進行曲線擬合的方法,可以在一組離散的已知數據點范圍內構造新的數據點。
實際上,這可能意味著您可以推斷已知位置點之間的新的估計位置點,以創建更高頻率的數據或填寫缺失值。
以最簡單的形式,可視化以下圖像:
在此,已知數據點在位置(1,1)和(3,3)處為紅色。使用線性迭代,我們可以在它們之間添加一個點,該點可以顯示為藍色。
這是一個非常簡單的問題,如果我們擁有更多已知的數據點,並且想要特定頻率的插值點又該怎麼辦呢?
這可以使用numpy包中的兩個函數在Python中非常簡單地實現:
我們有十個已知點,但是假設我們要一個50個序列。
我們可以使用np.linspace做到這一點;序列的起點,序列的終點以及我們想要的數據點總數
起點和終點將與您的初始x值的起點和終點相同,因此在此我們指定0和2 * pi。我們還指定了對序列中50個數據點的請求
現在,進行線性插值!使用np.interp,我們傳遞所需數據點的列表(我們在上面創建的50個),然後傳遞原始的x和y值
現在,讓我們繪制原始值,然後覆蓋新的內插值!
您還可以將此邏輯應用於時間序列中的x和y坐標。在這里,您將根據時間對x值進行插值,然後針對時間對y值進行插值。如果運瞎者您想在時間序列中使用更頻繁的數據點(例如,您想在神配視頻幀上疊加一些數據),或者缺少數據點或時間戳不一致,這將特別有用。
讓我們為一個場景創建一些數據,在該場景中,在60秒的比賽時間里,一輛賽車僅發出十個位置(x&y)輸出(在整個60秒的時間內,時間也不一致):
參考文獻
4. python插值的時候,怎麼獲取插值後的數據
scipy中好像並沒有進行下采樣的函數,嗯..難道是因為太過簡單了么,不過好像用一個循環就可以完成,但如果把向量看成一個時間序列,使用pandas中的date_range模塊也可以十分方便的以不同頻率進行采樣,並且,很多對文件的操作都是使用pandas操作的。
5. 如何通過python實現三次樣條插值
spline函數可以實現三次樣條插值 x = 0:10; y = sin(x); xx = 0:.25:10; yy = spline(x,y,xx); plot(x,y,'o',xx,yy) 另外fnplt csapi這兩個函數也是三次樣條插值函數,具體你可以help一下!
6. python怎樣對矩陣進行插值
首先需要創建數組才能對其進行其它操作。
我們可以通過給array函數傳遞Python的序列對象創建數組,如果傳遞的是多層嵌套的序列,將創建多維數組(下例中的變數c):
>>> a = np.array([1, 2, 3, 4])
>>> b = np.array((5, 6, 7, 8))
>>> c = np.array([[1, 2, 3, 4],[4, 5, 6, 7], [7, 8, 9, 10]])
>>> b
array([5, 6, 7, 8])
>>> c
array([[1, 2, 3, 4],
[4, 5, 6, 7],
[7, 8, 9, 10]])
>>> c.dtype
dtype('int32')
數組的大小可以通過其shape屬性獲得:
>>> a.shape
(4,)
>>> c.shape
7. 如何用python實現圖像的一維高斯濾波器
如何用python實現圖像的一維高斯濾波器
現在把卷積模板中的值換一下,不是全1了,換成一組符合高斯分布的數值放在模板裡面,比如這時中間的數值最大,往兩邊走越來越小,構造一個小的高斯包。實現的函數為cv2.GaussianBlur()。對於高斯模板,我們需要制定的是高斯核的高和寬(奇數),沿x與y方向的標准差(如果只給x,y=x,如果都給0,那麼函數會自己計算)。高斯核可以有效的出去圖像的高斯雜訊。當然也可以自己構造高斯核,相關函數:cv2.GaussianKernel().
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread(『flower.jpg『,0) #直接讀為灰度圖像
for i in range(2000): #添加點雜訊
temp_x = np.random.randint(0,img.shape[0])
temp_y = np.random.randint(0,img.shape[1])
img[temp_x][temp_y] = 255
blur = cv2.GaussianBlur(img,(5,5),0)
plt.subplot(1,2,1),plt.imshow(img,『gray『)#默認彩色,另一種彩色bgr
plt.subplot(1,2,2),plt.imshow(blur,『gray『)
8. python將高斯坐標轉換經緯度 經緯度坐標與高斯坐標的轉換代碼
#網上搜來的
# 高斯坐標轉經緯度演算法 # B=大地坐標X # C=大地坐標Y # IsSix=6度帶或3度帶
import math
def GetLatLon2(B, C,IsSix):
#帶號
D = math.trunc( C/ 1000000)
#中央經線(單位:弧度)
K = 0
if IsSix:
K = D * 6 - 3 #6度帶計算
else:
K = D * 3 #3度帶計算
L = B/(6378245*(1-0.006693421623)*1.0050517739)
M = L +(0.00506237764 * math.sin(2*L)/2-0.00001062451*math.sin(4*L)/4+0.0000002081*math.sin(6*L)/6)/1.0050517739
N = L +(0.00506237764 * math.sin(2*M)/2-0.00001062451*math.sin(4*M)/4+0.0000002081*math.sin(6*M)/6)/1.0050517739
O = L +(0.00506237764 * math.sin(2*N)/2-0.00001062451*math.sin(4*N)/4+0.0000002081*math.sin(6*N)/6)/1.0050517739
P = L +(0.00506237764 * math.sin(2*O)/2-0.00001062451*math.sin(4*O)/4+0.0000002081*math.sin(6*O)/6)/1.0050517739
Q = L +(0.00506237764 * math.sin(2*P)/2-0.00001062451*math.sin(4*P)/4+0.0000002081*math.sin(6*P)/6)/1.0050517739
R = L +(0.00506237764 * math.sin(2*Q)/2-0.00001062451*math.sin(4*Q)/4+0.0000002081*math.sin(6*Q)/6)/1.0050517739
S = math.tan(R)
T = 0.006738525415*(math.cos(R))**2
U = 6378245/math.sqrt(1-0.006693421623*(math.sin(R))**2)
V = 6378245*(1-0.006693421623)/(math.sqrt((1-0.006693421623*(math.sin(R))**2)))**3
W = 5+3*S**2+T-9*T*S**2
X = 61+90*S**2+45*S**4
Y = 1+2*S**2+T**2
Z = 5+28*S**2+24*S**4+6*T+8*T*S**2
Lat= (180/math.pi)*(R-(C-D*1000000-500000)**2*S/(2*V*U)+(C-D*1000000-500000)**4*W/(24*U**3*V)-(C-D*1000000-500000)**6*X/(7200*U**5*V))
Lon= (180/math.pi)*(C-D*1000000-500000)*(1-(C-D*1000000-500000)**2*Y/(6*U**2)+(C-D*1000000-500000)**4*Z/(120*U**4))/(U*math.cos(P))
Lat = Lat
Lon = K + Lon
return (Lon, Lat)
9. 圖像雙三次插值演算法原理及python實現
一. 圖像雙三次插值演算法原理:
假設源圖像 A 大小為 m*n ,縮放後的目標圖像 B 的大小為 M*N 。那麼根據比例我們可以得到 B(X,Y) 在 A 上的對應坐標為 A(x,y) = A( X*(m/M), Y*(n/N) ) 。在雙線性插值法中,我們選取 A(x,y) 的最近四個點。而在雙立方插值法中,我們選取的是最近的16個像素點作為計算目標圖像 B(X,Y) 處像素值的參數。如圖所示:
如圖所示昌叢耐 P 點就是目標圖像 B 在 (X,Y) 處對應於源圖像中的位置,P 的坐標位置會出現小數部分,所以我們假設 P 的坐標為 P(x+u,y+v),其中 x,y 分別表示整數部分,u,v 分別表示小數部分。那麼我們就可以得到如圖所示的最近 16 個像素的位置,在這里用 a(i,j)(i,j=0,1,2,3) 來表示。
雙立方插值的目的就是通過找到一種關系,或者說系數,可以把這 16 個像素對於 P 處像素值的影響因子找出來,從而根據這個影響因子來獲得目標圖像對應點的像素值,達到圖像縮放的目的。
耐春 BiCubic基函數形式如下:
二. python實現雙三次插值演算法
from PIL import Image
import numpy as np
import math
# 產生16個像素點不同的權重
def BiBubic(x):
x=abs(x)
if x<=1:
return 1-2*(x**2)+(x**3)
elif x<2:
return 4-8*x+5*(x**2)-(x**3)
else:
return 0
# 雙三次插值演算法
# dstH為目標圖像的高,dstW為目標圖像的寬
def BiCubic_interpolation(img,dstH,dstW):
scrH,scrW,_=img.shape
#img=np.pad(img,((1,3),(1,3),(0,0)),'constant')
retimg=np.zeros((dstH,dstW,3),dtype=np.uint8)
for i in range(dstH):
for j in range(dstW):
scrx=i*(scrH/dstH)
scry=j*(scrW/dstW)
x=math.floor(scrx)
y=math.floor(scry)
鄭純 u=scrx-x
v=scry-y
tmp=0
for ii in range(-1,2):
for jj in range(-1,2):
if x+ii<0 or y+jj<0 or x+ii>=scrH or y+jj>=scrW:
continue
tmp+=img[x+ii,y+jj]*BiBubic(ii-u)*BiBubic(jj-v)
retimg[i,j]=np.clip(tmp,0,255)
return retimg
im_path='../paojie.jpg'
image=np.array(Image.open(im_path))
image2=BiCubic_interpolation(image,image.shape[0]*2,image.shape[1]*2)
image2=Image.fromarray(image2.astype('uint8')).convert('RGB')
image2.save('BiCubic_interpolation.jpg')
三. 實驗結果:
四. 參考內容:
https://www.cnblogs.com/wojianxin/p/12516762.html
https://blog.csdn.net/Ibelievesunshine/article/details/104942406
10. 在Python程序中的插值誤差問題,怎麼解決
代碼如下所示:import numpy as npfrom matplotlib import pyplot as pltfrom scipy.interpolate import interp1dx=np.linspace(0,10*np.pi,num=20)y=np.sin(x)f1=interp1d(x,y,kind='linear')#線性插值f2=interp1d(x,y,kind='cubic')#三次樣條插值x_pred=np.linspace(0,10*np.pi,num=1000)y1=f1(x_pred)y2=f2(x_pred)plt.figure()plt.plot(x_pred,y1,'r',label='linear')plt.plot(x,f1(x),'b--','origin')plt.legend()plt.show()plt.figure()plt.plot(x_pred,y2,'b--',label='cubic')plt.legend()plt.show()