国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

J a v a、P y t h o n和Ma t l a b混合編程及其在氣象中的應用

2017-09-03 10:57北京信息科技大學陳宇罡汪永青焦瑞莉
電子世界 2017年16期
關(guān)鍵詞:數(shù)據(jù)處理代碼編程

北京信息科技大學 陳宇罡 汪永青 李 琳 焦瑞莉

中國科學院大氣物理研究所 王立志

J a v a、P y t h o n和Ma t l a b混合編程及其在氣象中的應用

北京信息科技大學 陳宇罡 汪永青 李 琳 焦瑞莉

中國科學院大氣物理研究所 王立志

本文對于Java、Python和Matlab混合編程方法進行一定的探討,并結(jié)合氣象數(shù)據(jù)的分析處理的實際工作,通過重用原有的Matlab、Python的代碼,在數(shù)據(jù)倉庫軟件RAMADDA的基礎上,快速實現(xiàn)氣象數(shù)據(jù)的統(tǒng)計、分析、發(fā)布、可視化,并為未來氣象數(shù)據(jù)基于WEB的在線分析、可視化集成提供借鑒。

Python;Matlab;混合編程;代碼重用;數(shù)據(jù)分析集成

Python是一種面向?qū)ο?、解釋型、動態(tài)數(shù)據(jù)類型的優(yōu)秀高級通用程序設計語言,相比于其他語言,Python可以更便捷的實現(xiàn)原型開發(fā),并能夠和其他語言諸如C++、Java等很好的結(jié)合。Matlab是由mathworks公司開發(fā)的用于數(shù)值計算、科學仿真和數(shù)據(jù)可視化的高級計算語言和交互式環(huán)境,因其強大的計算和繪圖功能在氣象領域得到了廣泛的應用。UCAR提供的開源內(nèi)容與存儲管理系統(tǒng)RAMADDA(Repository for Archiving, Managing and Accessing Diverse DAta)以Java為核心語言,通過IDV(Integrated Data Viewer)嵌入實現(xiàn)三維可視化,在地球科學領域得到廣泛應用;其可以覆蓋氣象業(yè)務的大多數(shù)數(shù)據(jù)格式,以數(shù)據(jù)庫技術(shù)、文件服務、IDV、Google Map API等技術(shù)為基礎完成氣象數(shù)據(jù)的內(nèi)容管理。

因為Python和Matlab在氣象數(shù)據(jù)處理中的廣泛應用,大量的基于Python和Matlab的代碼被開發(fā)并被廣泛使用。本文以基于Java語言的RAMADDA系統(tǒng),通過Java、Python和Matlab混合編程技術(shù),將已有的Python和Matlab數(shù)據(jù)處理分析代碼復用,并通過RAMADDA平臺實現(xiàn)數(shù)據(jù)的快速存儲、發(fā)布、分析處理及可視化。

1.Java、Python和Matlab混合編程的實現(xiàn)

1.1 Java和Matlab的混合編程,實現(xiàn)Matlab函數(shù)的重用

通過在Matlab中運行deploytool,將.m函數(shù)通過庫編譯器(Library Compiler)打包成Java包。同時將生成的jar包和Matlab安裝目錄下的javabuilder.jar一同添加到Java的庫路徑中,就可以實現(xiàn)Java對于Matlab函數(shù)的調(diào)用。

圖1 deploytool工具箱

選擇Java Package類型,并添加需要打包的.m的Matlab函數(shù)文件,按設計需求修改相應的包名、生成的類名稱和類方法,最后執(zhí)行Package動作打包完成,操作如圖2所示。

圖2 選擇類型和.m文件

1.2 使用Jython實現(xiàn)Java和Python及Matlab的混合編程

通過Java和Python的混合調(diào)用有三種方法:

1)通過Java編寫的類中直接執(zhí)行Python語句即可,代碼如下:

PythonInterpreter interpreter = new PythonInterperter();

Interpreter.exec( “day =(‘Mon’, ‘Tue’, ‘Wed’, ‘Thu’, ‘Fri’,’Sat’, ‘Sun’ ); );

Interpreter.exec( “print( days[1] );” );

2)在Java中調(diào)用已經(jīng)編寫好的Python腳本文件,代碼如下:

Python文件如下(假設文件名為adder.py):

def adder( a, b ):

return a + b

Java文件如下:

PythonInterpreter interpreter = new PythonInterpreter();

Interpreter.execf i le( “adder.py” );

PyFunction func = (PyFunction)interpreter.get( “adder”, PyFunction.class );

Int a = 2017, b = 2;

PyObject pyobj = func.__call__( new PyInteger( a ), new Py-Integer( b ));

System.out.println( a + “ + “ + b + “ = “ + pyobj.to-String());

3)Java編寫的類中直接執(zhí)行Python腳本文件

PythonInterpreter interpreter = new PythonInterpreter();

Interpreter.execf i le( “adder.py” );

本文中采用第二種方法,通過編寫Python實現(xiàn)了關(guān)于顯著性檢驗的腳本文件。通過RAMADDA中的Java調(diào)用,實現(xiàn)將封裝的Matlab的函數(shù)實現(xiàn)的文件數(shù)據(jù)處理部分和Python實現(xiàn)的分析,統(tǒng)一集成到RAMADDA系統(tǒng)中,實現(xiàn)系統(tǒng)對于氣象數(shù)據(jù)的處理分析以及圖形可視化輸出的功能。

2.氣象數(shù)據(jù)的處理分析

2.1 數(shù)據(jù)資料

本文中使用數(shù)據(jù)為美國國家環(huán)境預測中心(NCEP)再分析資料計劃(1979-現(xiàn)在)的再分析資料集。下載了從1979-2016共38年的逐6小時全球格點氣溫資料。

2.2 氣象資料的處理

針對此資料集,基于Matlab的處理函數(shù),完成數(shù)據(jù)資料處理,包括不同時空區(qū)間的數(shù)據(jù)提取、不同空間的逐天/逐旬/逐月平均等等。

Matlab的代碼如下:

[MonthTempData.MonthMean] = BulkReadFunc( fi les, lon, lat, level, month )

function [MonthAirData,MonthMean] = BulkReadFunc(datadir,lon,lat,level,month)

fi lelist=dir([datadir,’*.nc’]); %指定批量數(shù)據(jù)的類型

k=length(f i lelist); %多少個nc文件

for s=1:k

fi leName=[datadir,f i lelist(s).name];

[MonthAirData{s},MonthMean(s)] = MonthAirFunc(f i leName,lon,lat,level,month);

%輸入年份nc文件,經(jīng)緯度,月份,時間,返回值為air溫度數(shù)組和月平均值end end

2.3 顯著性檢驗等數(shù)據(jù)分析

針對2.2提取的數(shù)據(jù),進行數(shù)據(jù)處理,Python處理代碼如下(部分代碼示例):

圖3 python部分代碼示例

2.4 處理分析結(jié)果

通過上述數(shù)據(jù)處理和分析得到的結(jié)果,以RAMADDA管理系統(tǒng)進行數(shù)據(jù)發(fā)布、結(jié)果展示。本文作為示例僅僅給出了歷年2月份的1000百帕的溫度分析,區(qū)域為北京和華北。

圖4 北京及華北2月份1000百帕氣溫距平圖

從圖4可見,北京和華北2月距平溫度變化高度相關(guān),30年的前十年和后十年均為變暖的趨勢,尤其是從2012年開始,由冷到暖的趨勢明顯。通過簡單的分析曲線,為氣象工作者提供簡便的數(shù)據(jù)處理和分析工具。

3.結(jié)語

因為Matlab在氣象領域的廣泛應用,使用者手中存在了大量編寫完成的函數(shù);Python以其在字符串處理和繪圖功能上的優(yōu)勢,使得越來越多的氣象科技工作者將其作為主要的數(shù)據(jù)處理分析工具;Java語言是目前WEB應用開發(fā)的主流語言,可應用于多種平臺。本文通過實際應用,給出了簡單快捷的Java、Python和Matlab的混合編程解決方案:以Java實現(xiàn)的RAMADDA內(nèi)容管理系統(tǒng)為基礎,通過混合編程技術(shù),在充分重用原有的Matlab函數(shù)庫的基礎上通過Python實現(xiàn)數(shù)據(jù)的分析處理,利用RAMADDA框架實現(xiàn)結(jié)果的可視化。

[1]python home[EB/OL]. (2017-05-01). https://www.python.org/.

[2]MATLAB Home(Analyze and design your world-Get the full power of MATLAB)[EB/OL]. (2017-05-01).https://cn.mathworks. com/products/matlab-home.html.

[3]Unidata Support for RAMADDA[EB/OL].(2017-05-10). https:// wiki.ucar.edu/display/unidata/Unidata+Support+for+RAMADDA.

[4]Integrated Data Viewer(IDV)[EB/OL]. (2012-11-15). http:// www.unidata.ucar.edu/software/idv.

[5]張慧,史奎橋,楊揚,等.應用Matlab 自動繪制氣象等值線圖[J].廣東氣象,2016,38(4):74-77.

[6]何險峰,馬力,羅永康.分布式氣象內(nèi)容管理系統(tǒng)設計[J].氣象科技,2013,41(6):1036-1042.

[7]王寧,汪飛星.基于Python開發(fā)氣象服務器運行系統(tǒng)界面[J].微機發(fā)展,2003,13(7):46-47.

北京信息科技大學2016年度‘實培計劃’項目資助。

王立志(1971-),男,碩士,高級工程師,主要研究方向數(shù)值模式開發(fā)、高性能計算。

猜你喜歡
數(shù)據(jù)處理代碼編程
認知診斷缺失數(shù)據(jù)處理方法的比較:零替換、多重插補與極大似然估計法*
ILWT-EEMD數(shù)據(jù)處理的ELM滾動軸承故障診斷
編程,是一種態(tài)度
元征X-431實測:奔馳發(fā)動機編程
編程小能手
紡織機上誕生的編程
創(chuàng)世代碼
創(chuàng)世代碼
創(chuàng)世代碼
創(chuàng)世代碼