2016-07-04 43 views
2

我在該輪廓數據中進行線性插值並在其之後。對於計算我使用浮點型,因爲我不知道輸入數據將有多少小數。有時它可能不是小數,有時是一個或多於十個。沒有浮動僞影的輪廓

不幸的是因爲插值後使用浮點數並繪製相同值的輪廓,我得到不需要的工件。我該如何解決我的代碼不會產生不應該出現輪廓的輪廓?

簡單的代碼示例:

import numpy as np 
from scipy.interpolate import griddata 
import matplotlib.pyplot as plt 

interval_in = np.linspace(1, 100, 10) 
interval_out = np.linspace(1, 100, 100) 
xin, yin = np.meshgrid(interval_in, interval_in) 
zin = np.ones((10, 10))*10 
xout, yout = np.meshgrid(interval_out, interval_out) 
zout = griddata((xin.flatten(),yin.flatten()),zin.flatten(),(xout,yout),method='linear') 

contours = plt.contour(xout, yout, zout, levels=[10]) 
plt.show() 

Contour artifacts

回答

2

你的榜樣的zout應該是所有10.但9.9999999999999982和10.000000000000002之間實際變化,因此輪廓想要繪製此。您可以使用numpy的舍入到給定精度,

zout_ = np.round_(zout, decimals=3) 
contours = plt.contour(xout, yout, zout_, levels=[10]) 
plt.show() 

雖然,如果你的數據有一個大的範圍,輪廓應該正常工作...

+0

謝謝你,我知道它是浮動的問題。在問這個問題之前,我嘗試了整數相同的代碼,它根本沒有創建工件。我的問題是,雖然我不能簡單地舍入到小數點後三位,因爲在某些情況下,我的輪廓輸入值類似於0.0000001到0.0000002,輪廓間隔足以滿足它。但再想一想,我想我可以根據輸入值的最小值/最大值使用四捨五入到合適的小數位數。 – Miro

+0

其實我想我可以簡單地在我的代碼中四捨五入到小數點後12位,只是爲了擺脫浮點問題。這會爲我做。謝謝。 – Miro