我一直在努力研究如何在Python中複製IDL的平滑函數,並且我無法得到類似於相同結果的任何內容。 (免責聲明:從我觸及這種數學問題開始,這可能已經過去了10年,所以它已經被傾銷,讓信息從哪裏找到最便宜的本地燃料)。我試圖代碼此:在Python 2.7中複製IDL'smooth'
smooth(b,w,/nan)
其中b是含有NANS二維浮陣列(零 - 缺失的數據 - 也被轉換爲NAN)。
從IDL文件,它看起來更平滑使用棚車,所以從scipy.ndimage.filters我曾嘗試:
bsmooth = uniform_filter(b, w)
我知道這裏有一些根本性的差異:
- IDL的默認邊緣行爲是「端點從原始數組複製到沒有平滑的結果 」,而I 似乎沒有選擇使用統一過濾器執行此操作。
- 治療NaN元素。在IDL中,/ nan關鍵字似乎爲 意味着在可能的情況下,NaN值將由窗口中其他點的結果 填充。如果沒有有效的分數 產生一個結果,通過一個MISSING關鍵字。我以爲我可以 近似使用 scipy.interpolate的NearestNDInterpolator平滑下面這種行爲(由於在這裏的輝煌 解釋亞歷克斯: filling gaps on an image using numpy and scipy)
這裏是我的測試序列:
>>>b array([[ 0.97599638, 0.93114936, 0.87070072, 0.5379253 ],
[ 0.34873217, nan, 0.40985891, 0.22407863],
[ nan, nan, nan, 0.67532134],
[ nan, nan, 0.85441768, nan]])
我的答案與IDL沒有最小的相似之處,不管我是否使用/ nan關鍵字。
IDL> smooth(b,2,/nan)
0.97599638 0.93114936 0.87070072 0.53792530
0.34873217 0.70728749 0.60817236 0.22407863
NaN 0.53766960 0.54091913 0.67532134
NaN NaN 0.85441768 NaN
IDL> smooth(b,2)
0.97599638 0.93114936 0.87070072 0.53792530
0.34873217 -NaN -NaN 0.22407863
-NaN -NaN -NaN 0.67532134
-NaN -NaN 0.85441768 NaN
我承認我發現scipy文檔比較稀疏,所以我不知道我是否真的在做我認爲我在做的事情。事實上,我認爲這兩種python方法會使圖像平滑並給出不同的答案,這表明事情並非我所理解的那樣。
>>>uniform_filter(b, 2)
array([[ 0.97599638, 0.95357287, 0.90092504, 0.70431301],
[ 0.66236428, nan, nan, nan],
[ nan, nan, nan, nan],
[ nan, nan, nan, nan]])
我認爲這是有點奇怪它是如此空的,所以我試圖與100個元素(仍然使用爲2的窗口),並輸出圖像的陣列。結果(第一個圖像是「B」二是「bsmooth」)並不完全是我所期待的:
回過頭來看看這個小陣列和下面的例子: http://scipy.github.io/old-wiki/pages/Cookbook/SignalSmooth而且我認爲他會給輸出uniform_filter一樣,我想:
>>> box = np.array([1,1,1,1])
>>> box = box.reshape(2,2)
>>> box
array([[1, 1],
[1, 1]])
>>> bsmooth = scipy.signal.convolve2d(b,box,mode='same')
>>> print bsmooth
[[ 0.97599638 1.90714574 1.80185008 1.40862602]
[ 1.32472855 nan nan 2.04256356]
[ nan nan nan nan]
[ nan nan nan nan]]
很顯然,我已經完全誤解了SciPy的功能,甚至可能是一個IDL。如果任何人都可以幫助我儘可能地複製IDL平滑功能,我將非常感激。我需要相當長的時間才能得到一個不依賴於IDL的解決方案,我正在拋硬幣來決定是從頭開始編寫函數還是開發一種非常具有傳染性的疾病。
如何在python中執行相同的平滑處理?
這個IDL ALG? http://northstar-www.dartmouth.edu/doc/idl/html_6.2/SMOOTH.html – atomh33ls
http:// stackoverflow。com/questions/30532216/boxcar-average-algorithm-of-specified-weight – atomh33ls
就是這樣。我不知道我錯過了我一直在尋找和搜索的問題。雖然很有幫助的問題。 – emmalg