• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

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

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

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

      中國(guó)科學(xué)院大氣物理研究所 王立志

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

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

      中國(guó)科學(xué)院大氣物理研究所 王立志

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

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

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

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

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

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

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

      圖1 deploytool工具箱

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

      圖2 選擇類型和.m文件

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

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

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

      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文件如下(假設(shè)文件名為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實(shí)現(xiàn)了關(guān)于顯著性檢驗(yàn)的腳本文件。通過RAMADDA中的Java調(diào)用,實(shí)現(xiàn)將封裝的Matlab的函數(shù)實(shí)現(xiàn)的文件數(shù)據(jù)處理部分和Python實(shí)現(xiàn)的分析,統(tǒng)一集成到RAMADDA系統(tǒng)中,實(shí)現(xiàn)系統(tǒng)對(duì)于氣象數(shù)據(jù)的處理分析以及圖形可視化輸出的功能。

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

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

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

      2.2 氣象資料的處理

      針對(duì)此資料集,基于Matlab的處理函數(shù),完成數(shù)據(jù)資料處理,包括不同時(shí)空區(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); %多少個(gè)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)緯度,月份,時(shí)間,返回值為air溫度數(shù)組和月平均值end end

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

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

      圖3 python部分代碼示例

      2.4 處理分析結(jié)果

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

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

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

      3.結(jié)語(yǔ)

      因?yàn)镸atlab在氣象領(lǐng)域的廣泛應(yīng)用,使用者手中存在了大量編寫完成的函數(shù);Python以其在字符串處理和繪圖功能上的優(yōu)勢(shì),使得越來越多的氣象科技工作者將其作為主要的數(shù)據(jù)處理分析工具;Java語(yǔ)言是目前WEB應(yīng)用開發(fā)的主流語(yǔ)言,可應(yīng)用于多種平臺(tái)。本文通過實(shí)際應(yīng)用,給出了簡(jiǎn)單快捷的Java、Python和Matlab的混合編程解決方案:以Java實(shí)現(xiàn)的RAMADDA內(nèi)容管理系統(tǒng)為基礎(chǔ),通過混合編程技術(shù),在充分重用原有的Matlab函數(shù)庫(kù)的基礎(chǔ)上通過Python實(shí)現(xiàn)數(shù)據(jù)的分析處理,利用RAMADDA框架實(shí)現(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]張慧,史奎橋,楊揚(yáng),等.應(yīng)用Matlab 自動(dòng)繪制氣象等值線圖[J].廣東氣象,2016,38(4):74-77.

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

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

      北京信息科技大學(xué)2016年度‘實(shí)培計(jì)劃’項(xiàng)目資助。

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

      猜你喜歡
      數(shù)據(jù)處理代碼編程
      我家有只編程貓
      我家有只編程貓
      我家有只編程貓
      我家有只編程貓
      認(rèn)知診斷缺失數(shù)據(jù)處理方法的比較:零替換、多重插補(bǔ)與極大似然估計(jì)法*
      ILWT-EEMD數(shù)據(jù)處理的ELM滾動(dòng)軸承故障診斷
      創(chuàng)世代碼
      創(chuàng)世代碼
      創(chuàng)世代碼
      創(chuàng)世代碼
      宁远县| 竹溪县| 肥乡县| 昌邑市| 刚察县| 醴陵市| 马龙县| 固原市| 中牟县| 尚义县| 尼木县| 扶余县| 项城市| 北海市| 涞源县| 长岭县| 孙吴县| 美姑县| 南投市| 晋中市| 佛山市| 旬邑县| 顺平县| 泾阳县| 买车| 察雅县| 渭南市| 平湖市| 新丰县| 始兴县| 囊谦县| 大庆市| 沽源县| 临沧市| 滁州市| 沙湾县| 三都| 常德市| 唐山市| 育儿| 伊通|