Python:2維(平面/數組/矩陣)缺省值插值


學習自:python插值填補缺省值_插值缺失值2d python_weixin_39592315的博客-CSDN博客

問題

假設我們有一個2D數組(或者矩陣),其中有一些缺省值NaN,就像下邊這樣:

1   2   3   NaN   5
2   3   4   NaN   6
3   4   NaN NaN   7
4   5   NaN NaN   5
5   6   7     8   9

我們怎么將這些NaN填充為一些合理的值呢?

解決方案

我們可以用scipy.interpolate.griddata進行插值,這里先把完整代碼放上來:

#二維缺省值插值
import numpy as np
from scipy import interpolate
array = np.random.random_integers(0,10,(10,10)).astype(float) #①
array[array>7] = np.nan

array = np.ma.masked_invalid(array)#②
x
= np.arange(0, array.shape[1])#③ y = np.arange(0, array.shape[0])
xx,yy
=np.meshgrid(x,y) #④
x1
= xx[~array.mask]#⑤ y1 = yy[~array.mask] newarr = array[~array.mask].data
GD1
= interpolate.griddata((x1, y1), newarr.ravel(),(xx, yy),method='cubic')#⑥

解釋

①生成初始二維數組,在其中生成空值;

array = np.random.randint(0,10,(10,10)).astype(float) 
array[array>7]=np.nan
#生成形狀為(10,10),值為[0,10)的隨機int值的array
#將array中大於7的值設置為空

#結果array([[ 3.,  0.,  6., nan, nan, nan,  6.,  3.,  7.,  6.],
       [ 1.,  4.,  4.,  6., nan,  4.,  1., nan,  3.,  5.],
       [nan,  3.,  0., nan,  4.,  7.,  7.,  3.,  3.,  5.],
       [ 0.,  7.,  0.,  2.,  6.,  6.,  1.,  4.,  7., nan],
       [ 0., nan, nan, nan,  4., nan,  6.,  0.,  2., nan],
       [ 2.,  5.,  2., nan,  6., nan,  1.,  2.,  4.,  4.],
       [ 4.,  4.,  0.,  6.,  5.,  5.,  3.,  7.,  7.,  2.],
       [ 1.,  6.,  0.,  7.,  5.,  4.,  3.,  1.,  7.,  0.],
       [ 2.,  4.,  4., nan, nan,  6.,  3.,  1.,  5.,  2.],
       [ 3.,  4.,  0.,  3.,  3.,  2.,  4.,  4.,  2., nan]])

②生成array的Masked Array;

關於Masked Array這一點可以看Python:numpy.ma模塊 - ShineLe - 博客園

array=np.ma.masked_invalid(array)

③得到array的橫縱坐標序列x,y;

x=np.arange(0,array.shape[1])
y=np.arange(0,array.shape[1])

④由橫縱坐標序列構造2維網格;

XX,YY=np.meshgrid(x,y)

⑤提取原array中有效值的橫縱坐標及值;

x1=XX[~array.mask]
y1=YY[~array.mask]
newarr=array[~array.mask].data #提取Masked array中的data

這里的x1、y1、newarr都是一維的,每個元素都是一一對應的,即x1[i]、y1[i]、newarr[i]對應了第i+1個有效值的橫縱坐標及值。

⑥插值,二維插值

GD1 = interpolate.griddata((x1, y1), newarr.ravel(),(xx, yy),method='cubic')

關於inerpolate.griddata,可以看Python:Scipy.interpolate.griddata - ShineLe - 博客園


免責聲明!

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



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