ncl泰勒图(均方根误差、标准差、相关系数)
最近学习了一下泰勒图的做法,对2001年泰勒的文章进行了简单学习,说一点自己的理解:
泰勒图一般是用来评估多个模式对观测数据的模拟能力,包括标准差、中心型均方根误差、相关系数这三部分,这三部分可以构建一个三角关系。相关系数是用来量化模式之间的相似性,但是它有缺点,无法量化变化幅度。比如,当两个空间场变化极其相似,但是变化程度有量级差异,如果不看均方根误差而只看相关系数,那么很容易出现问题。标准差可以看出来模式相对于观测的离散程度。
在ncl的脚本中,官网提供了现成的代码给我们绘制泰勒图,只需要提供模式和观测之间的相关系数,以及模式与观测之间的标准差的比率,就可以画出。因为代码中用到的是标准差比率,根据文章中提到的三角关系,我们图中最终得到的是标准化后的样本标准差和标准化后的中心型均方根误差,这样得到的图更加清晰明了。
如果要对模式进行优选,就可以根据自己的需求,设定标准化后的标准差的范围(标准化后的中心型均方根误差类似),还可以对相关系数进行显著性检验等等。
下面是官网提供的泰勒图代码:
function taylor_diagram (wks:graphic ,RATIO[*][*]:numeric, CC[*][*]:numeric \,rOpts:logical)
;--------------------------------------------------------------------
; This version of taylor_diagram supports "paneling"
; It requires NCL version 4.2.0.a034 because it uses "gsn_create_legend"
;--------------------------------------------------------------------;
; Generate a Taylor Diagram:
; Generate Multiple Aspects of Model Performance in a Single Diagram
; Taylor, K. E., J. Geophys. Res., 106, D7, 7183-7192, 2001
;
; An example:
; http://www.grida.no/climate/ipcc_tar/wg1/fig8-4.htm
;
; This expects one or more datasets. The left dimension
; is the number of datasets. The rightmost is the number of pts.
;
; Markers are at:
; http://www.ncl.ucar.edu/Document/Graphics/Resources/gs.shtml
;
; By default, the function can handle up to 10 variable comparisons..
; To expand ... modify the 'Colors' and 'Markers' attributes.
; The user can change / add some default settings.
;
; The defaults that the user can modify:
;
; rOpts = True
; ; 'made-up' resources
; rOpts@Colors = (/ "blue" , "red", "green", "cyan", "black" \
; , "turquoise", "brown", "yellow"/)
; rOpts@Markers = (/ 2, 3, 6, 14, 9, 12, 7, 4/) ; Marker Indices
; rOpts@markerTxOffset = 0.0175 ; offset for text above marker
; rOpts@stnRad = (/ 1. /) ; (/ 0.50, 0.75, 1.5 /)
; rOpts@centerDiffRMS = False ; True mean draw additional radii from REF
; rOpts@caseLabelsFontHeightF = 0.05
; rOpts@varLabelsFontHeightF = 0.013
; rOpts@varLabelsYloc = 0.65
; rOpts@legendWidth = 0.015
; rOpts@legendHeight = 0.030*nCase
; rOpts@taylorDraw = True
; rOpts@taylorFrame = True
;
; ; standard NCL resources
; rOpts@tiMainString = "Taylor" ; not using title makes plot bigger
; rOpts@gsMarkerSizeF = 0.0085 ; marker size
; rOpts@gsMarkerThicknessF = 1.0
; rOpts@txFontHeightF = 0.0125 ; text size
; rOpts@tiMainFontHeightF = 0.0225 ; tiMainString size
;
; It returns to the user a graphic object containing the
; Taylor background and plotted x/y pts.
; This graphic object contains a simple Taylor background appropriate
; for standardized data and the markers for the datasets.
; ==================================================================
; This version allows paneling:
; The 'cumbersome' "dum" variables were added by
; Adam Phillips to allow paneling via "gsn_add_?".
; ==================================================================
begindimR = dimsizes(RATIO)nCase = dimR(0) ; # of cases [models] nVar = dimR(1) ; # of variables; x/y coordinates for plottingX = new ( (/nCase,nVar/) , typeof(RATIO) )Y = new ( (/nCase,nVar/) , typeof(RATIO) )do nc=0,nCase-1angle = acos( CC(nc,:) ) ; array operation X(nc,:) = RATIO(nc,:)*cos( angle ) Y(nc,:) = RATIO(nc,:)*sin( angle ) end doxyMin = 0. xyOne = 1.00xyMax = 1.65xyMax_Panel = xyMax+ 0.10 ; paneling purposesif (rOpts .and. isatt(rOpts,"txFontHeightF")) then FontHeightF = rOpts@txFontHeightF ; user wants to specify sizeelseFontHeightF = 0.0175end if; ----------------------------------------------------------------
; Part 1:
; base plot: Based upon request of Mark Stevens
; basic x-y and draw the 1.0 observed and the outer curve at 1.65
; ----------------------------------------------------------------rxy = True rxy@gsnDraw = Falserxy@gsnFrame = Falserxy@vpHeightF = 0.65rxy@vpWidthF = 0.65rxy@tmYLBorderOn = Falserxy@tmXBBorderOn = Falserxy@tiYAxisString = "Standardized Deviations (Normalized)"rxy@tiYAxisFontHeightF= FontHeightF ; default=0.025 rxy@tmXBMode = "Explicit" rxy@tmXBValues = (/0.0,0.25,0.50,0.75,1.00,1.25,1.5/) ; major tm; default "OBS" or "REF";rxy@tmXBLabels = (/"0.00","0.25","0.50","0.75","REF" ,"1.25","1.50"/)rxy@tmXBLabels = (/" ","0.25","0.50","0.75","REF" ,"1.25","1.50"/)if (rOpts .and. isatt(rOpts,"OneX") ) then ; eg: rOpts@OneX="1.00" ;rxy@tmXBLabels = (/"0.00","0.25","0.50","0.75",rOpts@OneX,"1.25","1.50"/)rxy@tmXBLabels = (/" ","0.25","0.50","0.75",rOpts@OneX,"1.25","1.50"/)end ifrxy@tmXBMajorLengthF = 0.015 ; default=0.02 for a vpHeightF=0.6rxy@tmXBLabelFontHeightF = FontHeightFrxy@tmXBMinorOn = Falserxy@trXMaxF = xyMax_Panelrxy@tmYLMode = "Manual"rxy@tmYLMinorOn = Falserxy@tmYLMajorLengthF = rxy@tmXBMajorLengthFrxy@tmYLLabelFontHeightF = FontHeightFrxy@tmYLMode = "Explicit" rxy@tmYLValues = (/0.0, .25,0.50, 0.75, 1.00, 1.25, 1.5/) ; major tmrxy@tmYLLabels = (/"0.00","0.25","0.50","0.75","1.00","1.25","1.50"/);rxy@tmYLLabels = (/" ","0.25","0.50","0.75","1.00","1.25","1.50"/)rxy@trYMaxF = xyMax_Panelrxy@tmYRBorderOn = Falserxy@tmYROn = False ; Turn off right tick marks.rxy@tmXTBorderOn = Falserxy@tmXTOn = False ; Turn off right tick marks.rxy@xyDashPatterns = (/ 0 /) ; line characteristics (dash,solid)rxy@xyLineThicknesses = (/ 2./) ; choose line thicknessrxy@gsnFrame = False ; Don't advance the frame.; create outer 'correlation axis'npts = 200 ; arbitraryxx = fspan(xyMin,xyMax,npts) yy = sqrt(xyMax^2 - xx^2 ) ; outer correlation line (xyMax)sLabels = (/"0.0","0.1","0.2","0.3","0.4","0.5","0.6" \ ; correlation labels,"0.7","0.8","0.9","0.95","0.99","1.0" /); also, major tmcLabels = stringtofloat(sLabels)rad = 4.*atan(1.0)/180.angC = acos(cLabels)/rad ; angles: correlation labelsif (rOpts .and. isatt(rOpts,"tiMainString")) thenrxy@tiMainString = rOpts@tiMainString;rxy@tiMainOffsetYF = 0.015 ; default 0.0if (isatt(rOpts,"tiMainFontHeightF")) thenrxy@tiMainFontHeightF = rOpts@tiMainFontHeightFelserxy@tiMainFontHeightF = 0.0225 ; default 0.025 end ifend if
;;if (rOpts .and. isatt(rOpts,"gsnCenterString")) then
;; rxy@gsnCenterString = rOpts@gsnCenterString ; only gsn_csm_xy
;;end iftaylor = gsn_xy(wks,xx,yy,rxy) ; Create and draw XY plot.rsrRes = TruersrRes@gsLineThicknessF = rxy@xyLineThicknesses(0) ; line thicknessrsrRes@gsLineDashPattern = 0 ; solid line pattern; draw x and y to xyMaxdum0 = gsn_add_polyline(wks,taylor,(/0., 0. /),(/0.,xyMax/), rsrRes)dum1 = gsn_add_polyline(wks,taylor,(/0.,xyMax/),(/0., 0. /), rsrRes)xx = fspan(xyMin, xyOne ,npts) ; draw 1.0 standard radiusyy = sqrt(xyOne - xx^2) rsrRes@gsLineDashPattern = 1 ; dashed line patternrsrRes@gsLineThicknessF = rxy@xyLineThicknesses(0) ; line thicknessdum2 = gsn_add_polyline(wks,taylor,xx,yy, rsrRes)delete(xx)delete(yy)if (rOpts .and. isatt(rOpts,"stnRad") ) thenrsrRes@gsLineThicknessF = 1 ; rxy@xyLineThicknesses(0) nStnRad = dimsizes(rOpts@stnRad)dum3 = new(nStnRad,graphic)do n=0,nStnRad-1rr = rOpts@stnRad(n)xx = fspan(xyMin, rr ,npts) yy = sqrt(rr^2 - xx^2) dum3(n) = gsn_add_polyline(wks,taylor,xx,yy, rsrRes)end dotaylor@$unique_string("dum")$ = dum3delete(xx)delete(yy)end ifgetvalues taylor ; get style info from taylor"tmYLLabelFont" : tmYLLabelFont ; use for correlation axis"tmYLLabelFontHeightF" : tmYLLabelFontHeightFend getvalues; ----------------------------------------------------------------
; Part 2:
; Correlation labels
; ----------------------------------------------------------------radC = xyMax ; for correlation labelsxC = radC*cos(angC*rad)yC = radC*sin(angC*rad)
; added to get some separationxC = xC + 0.020*cos(rad*angC)yC = yC + 0.060*sin(rad*angC)txRes = True ; text mods desiredtxRes@txFontHeightF = FontHeightF ; match YL txRes@tmYLLabelFont = tmYLLabelFont ; match YLtxRes@txAngleF = -45.if (.not.isatt(rOpts,"drawCorLabel") .or. rOpts@drawCorLabel) then dum4 = gsn_add_text(wks,taylor,"Correlation",1.30,1.30,txRes)taylor@$unique_string("dum")$ = dum4end iftxRes@txAngleF = 0.0 txRes@txFontHeightF = FontHeightF*0.50 ; bit smaller;;dum0 = gsn_add_text(wks,taylor,"OBSERVED",1.00,0.075,txRes)plRes = TrueplRes@gsLineThicknessF = 2.txRes@txJust = "CenterLeft" ; Default="CenterCenter".txRes@txFontHeightF = FontHeightF ; match YL ;txRes@txBackgroundFillColor = "white"tmEnd = 0.975radTM = xyMax*tmEnd ; radius end: major TM xTM = new( 2 , "float")yTM = new( 2 , "float")dum5 = new(dimsizes(sLabels),graphic)dum6 = dum5do i=0,dimsizes(sLabels)-1 ; Loop to draw stringstxRes@txAngleF = angC(i)dum5(i) = gsn_add_text(wks, taylor, sLabels(i),xC(i),yC(i),txRes) ; cor labelxTM(0) = xyMax*cos(angC(i)*rad) ; major tickmarks atyTM(0) = xyMax*sin(angC(i)*rad) ; correlation labelsxTM(1) = radTM*cos(angC(i)*rad) yTM(1) = radTM*sin(angC(i)*rad)dum6(i) = gsn_add_polyline(wks,taylor,xTM,yTM,plRes)end do; minor tm locationsmTM = (/0.05,0.15,0.25,0.35,0.45,0.55,0.65 \ ,0.75,0.85,0.91,0.92,0.93,0.94,0.96,0.97,0.98 /)angmTM = acos(mTM)/rad ; angles: correlation labelsradmTM = xyMax*(1.-(1.-tmEnd)*0.5) ; radius end: minor TM dum7 = new(dimsizes(mTM),graphic)do i=0,dimsizes(mTM)-1 ; manually add tmxTM(0) = xyMax*cos(angmTM(i)*rad) ; minor tickmarksyTM(0) = xyMax*sin(angmTM(i)*rad)xTM(1) = radmTM*cos(angmTM(i)*rad) yTM(1) = radmTM*sin(angmTM(i)*rad)dum7(i) = gsn_add_polyline(wks,taylor,xTM,yTM,plRes)end do; added for Wanliif (rOpts .and. isatt(rOpts,"ccRays") ) thenangRL = acos(rOpts@ccRays)/rad ; angles: radial linesrlRes = TruerlRes@gsLineDashPattern= 2 ; line patternrlRes@gsLineThicknessF = 1 ; choose line thicknessif (isatt(rOpts,"ccRays_color")) thenrlRes@gsLineColor = "LightGray"end ifdum8 = new(dimsizes(angRL),graphic)do i=0,dimsizes(angRL)-1xRL = xyMax*cos(angRL(i)*rad)yRL = xyMax*sin(angRL(i)*rad)dum8(i) = gsn_add_polyline(wks,taylor,(/0, xRL /),(/0, yRL /),rlRes)end dotaylor@$unique_string("dum")$ = dum8end if; ----------------------------------------------------------------
; Part 3:
; Concentric about 1.0 on XB axis
; ----------------------------------------------------------------if (rOpts .and. isatt(rOpts,"centerDiffRMS") \.and. rOpts@centerDiffRMS) thenrespl = True ; polyline mods desiredrespl@xyLineThicknessF = 1.0 ; line thicknessrespl@xyLineDashPattern = 2 ; short dash linesrespl@gsLineColor = "Black" ; line color if (isatt(rOpts,"centerDiffRMS_color")) thenrespl@gsLineColor = "LightGray"end ifdx = 0.25ncon = 4 ; 0.75, 0.50, 0.25, 0.0npts = 100 ; arbitraryang = fspan(180,360,npts)*raddum9 = new(ncon,graphic)do n=1,ncon rr = n*dx ; radius from 1.0 [OBS] abscissaxx = 1. + rr*cos(ang)yy = fabs( rr*sin(ang) )if (n.le.2) thendum9(n-1) = gsn_add_polyline(wks,taylor,xx,yy,respl)end ifif (n.eq.3) thenn3 = floattointeger( 0.77*npts ) dum9(n-1) = gsn_add_polyline(wks,taylor,xx(0:n3),yy(0:n3),respl)end ifif (n.eq.4) thenn4 = floattointeger( 0.61*npts ) dum9(n-1) = gsn_add_polyline(wks,taylor,xx(0:n4),yy(0:n4),respl)end ifend dodelete(ang)delete(xx)delete(yy)taylor@$unique_string("dum")$ = dum9end if
; ---------------------------------------------------------------
; Part 4:
; generic resources that will be applied to all users data points
; of course, these can be changed
; http://www.ncl.ucar.edu/Document/Graphics/Resources/gs.shtml
; ---------------------------------------------------------------if (rOpts .and. isatt(rOpts,"Markers")) thenMarkers = rOpts@MarkerselseMarkers = (/ 4, 6, 8, 0, 9, 12, 7, 2, 11, 16/) ; Marker Indicesend ifif (rOpts .and. isatt(rOpts,"Colors")) thenColors = rOpts@ColorselseColors = (/ "red", "blue", "green", "cyan", "orange" \, "turquoise", "brown", "yellow", "purple", "black"/)end ifif (rOpts .and. isatt(rOpts,"gsMarkerThicknessF")) thengsMarkerThicknessF = rOpts@gsMarkerThicknessFelsegsMarkerThicknessF = 1.0end ifif (rOpts .and. isatt(rOpts,"gsMarkerSizeF")) thengsMarkerSizeF = rOpts@gsMarkerSizeFelsegsMarkerSizeF = 0.0085 ; Default: 0.007end ifgsRes = TruegsRes@gsMarkerThicknessF = gsMarkerThicknessF ; default=1.0gsRes@gsMarkerSizeF = gsMarkerSizeF ; Default: 0.007 ptRes = True ; text options for pointsptRes@txJust = "BottomCenter"; Default="CenterCenter".ptRes@txFontThicknessF = 1.2 ; default=1.00ptRes@txFontHeightF = 0.0125 ; default=0.05if (rOpts .and. isatt(rOpts,"txFontHeightF")) thenptRes@txFontHeightF = rOpts@txFontHeightF end ifmarkerTxYOffset = 0.0175 ; defaultif (rOpts .and. isatt(rOpts,"markerTxYOffset")) thenmarkerTxYOffset = rOpts@markerTxYOffset ; user defined offsetend ifdum10 = new((nCase*nVar),graphic)dum11 = dum10do n=0,nCase-1gsRes@gsMarkerIndex = Markers(n) ; marker style (+)gsRes@gsMarkerColor = Colors(n) ; marker colorptRes@txFontColor = gsRes@gsMarkerColordo i=0,nVar-1dum10(n*nVar+i) = gsn_add_polymarker(wks,taylor,X(n,i),Y(n,i),gsRes) dum11(n*nVar+i) = gsn_add_text(wks,taylor,(i+1),X(n,i),Y(n,i)+markerTxYOffset,ptRes)end doend do; ---------------------------------------------------------------
; Part 5: ; add case legend and variable labels
; ---------------------------------------------------------------if (rOpts .and. isatt(rOpts,"caseLabels")) then if (isatt(rOpts,"caseLabelsFontHeightF")) thencaseLabelsFontHeightF = rOpts@caseLabelsFontHeightFelsecaseLabelsFontHeightF = 0.05 end iflgres = Truelgres@lgMarkerColors = Colors ; colors of markerslgres@lgMarkerIndexes = Markers ; Markers lgres@lgMarkerSizeF = gsMarkerSizeF ; Marker sizelgres@lgItemType = "Markers" ; draw markers onlylgres@lgLabelFontHeightF = caseLabelsFontHeightF ; font height of legend case labelsif (isatt(rOpts,"legendWidth")) thenlgres@vpWidthF = rOpts@legendWidthelselgres@vpWidthF = 0.15 ; width of legend (NDC)end ifif (isatt(rOpts,"legendHeight")) thenlgres@vpHeightF = rOpts@legendHeightelse lgres@vpHeightF = 0.030*nCase ; height of legend (NDC)end iflgres@lgPerimOn = False ; turn off perimeternModel = dimsizes( rOpts@caseLabels )lbid = gsn_create_legend(wks,nModel,rOpts@caseLabels,lgres)amres = Trueamres@amParallelPosF = 0.35 amres@amOrthogonalPosF = -0.35 annoid1 = gsn_add_annotation(taylor,lbid,amres) ; add legend to plotend ifif (rOpts .and. isatt(rOpts,"varLabels")) then nVar = dimsizes(rOpts@varLabels)if (isatt(rOpts,"varLabelsFontHeightF")) thenvarLabelsFontHeightF = rOpts@varLabelsFontHeightFelsevarLabelsFontHeightF = 0.013end iftxres = Truetxres@txFontHeightF = varLabelsFontHeightFtxres@txJust = "CenterLeft" ; justify to the center left;delta_y = 0.02 delta_y = 0.06 if (rOpts .and. isatt(rOpts,"varLabelsYloc")) thenys = rOpts@varLabelsYloc ; user specifiedelseys = max( (/nVar*delta_y , 0.30/) )end ifdo i = 1,nVar if (i.eq.1) thendum12 = new(nVar,graphic)end ifdum12(i-1) = gsn_add_text(wks,taylor,i+" - "+rOpts@varLabels(i-1), .125,ys,txres)ys = ys- delta_yend dotaylor@$unique_string("dum")$ = dum12end iftaylor@$unique_string("dum")$ = dum0 ; x-axistaylor@$unique_string("dum")$ = dum1 ; y-axistaylor@$unique_string("dum")$ = dum2 ; 1.0 std curvetaylor@$unique_string("dum")$ = dum5 ; labels [COR]taylor@$unique_string("dum")$ = dum6 ; major tm [COR]taylor@$unique_string("dum")$ = dum7 ; minor tmtaylor@$unique_string("dum")$ = dum10 ; markerstaylor@$unique_string("dum")$ = dum11 ; textif (.not.isatt(rOpts,"taylorDraw") .or. \(isatt(rOpts,"taylorDraw") .and. rOpts@taylorDraw)) then draw(taylor)end ifif (.not.isatt(rOpts,"taylorFrame") .or. \(isatt(rOpts,"taylorFrame") .and. rOpts@taylorFrame)) then frame(wks)end ifreturn(taylor)
end
ncl泰勒图(均方根误差、标准差、相关系数)相关推荐
- 超干货 | 泰勒图(Taylor diagram)绘制方法大汇总
近日,有小伙伴私信小编关于泰勒图(Taylor diagram) 的绘制方法,小编也进行了相关资料查询,那么,今天这篇推文借给大家介绍一下如何绘制泰勒图(Taylor diagram),具体内容如下: ...
- MATLAB | 绘图复刻(九) | 泰勒图及组合泰勒图
有粉丝问我这个图咋画: 我一看,这不就泰勒图嘛,就fileexchange上搜了一下泰勒图绘制代码,但是有的代码比较新的版本运行要改很多地方,有的代码需要包含一些压缩包没并没有的别人写的函数,于是我干 ...
- MATLAB绘制泰勒图(Taylor diagram)
泰勒图(Taylor diagram) 泰勒图是Karl E. Taylor于2001年首先提出,主要用来比较几个气象模式模拟的能力,因此该表示方法在气象领域使用最多,但是在其他自然科学领域也有一定的 ...
- MATLAB绘制泰勒图(10个以上model)
MATLAB绘制泰勒图代码 开头先说明一下我用惯了R语言却为什么选择MATLAB画泰勒图 R包里能画泰勒图的有两个,如果对图件的美观度要求不高,可以选择: openair 包或者plotrix包,画出 ...
- 泰勒图的MATLAB实现
泰勒图的MATLAB实现 介绍 分析 介绍 泰勒图简单的说就是一种可以表示标准差, 均方根误差和相关系数三个指标的图.比单一R²和RMSE等横纵坐标的图更加直观. 它能够将多模式的相关信息集中表示,是 ...
- python 泰勒图
搬运的搬运的搬运的! 忘了从哪里参考的了,储存一下o(* ̄▽ ̄*)ブ 定义函数后期调用,这样在一页多图的时候代码能短一点. 1.定义函数 #定义函数 def tar(ax,r,std):ax.set_ ...
- Matlab 泰勒图
使用的是已经完善的Matlab 泰勒图的脚本,下载地址 嵌套多个函数,根据具体的使用需要,对脚本进行解读和更改 1. 计算数据 首先是计算使用的数据 具体的使用的是 taylor_statistics ...
- python气象处理与绘图_Python气象数据处理与绘图(18):泰勒图
泰勒图绘制的核心思想是设计一个只有第一象限的极坐标,并将方差,相关系数进行捆绑,通过转化为极坐标系坐标进行绘制.为了实现泰勒图的绘制,我设计了两个函数: set_tayloraxes(fig, loc ...
- 全球14个典型区域的total runof 泰勒图比较
选取三个纬度带的14个典型分区进行区域 total runoff 泰勒图比较 % Alaska(59-72N,170-140W) Northwest_Canada(55-66.5N,125-100W) ...
最新文章
- [14] 薪酬迅速翻倍的13条跳槽原则
- Python Qt GUI设计:信号与槽的使用方法(基础篇—7)
- 这就是芬兰:先让全国1%的人学起AI!
- 制作生成静态页面的新闻系统
- 很慢怎么办_数学不好怎么办?脑子笨逻辑思维不好,反应很慢该怎么办?
- Spring Boot AOP记录用户操作日志
- Hive引擎改为Tez笔记
- 类的构造器-init和new
- [Java]中[this][super]用法总结
- python创建文件夹用什么函数_Python——os.mkdir()在指定路径下创建文件夹 + 路径的连接理解...
- 视频监控物联卡有什么作用
- 触动精灵怎么设置虚拟服务器,如何调试脚本及解决问题的方法
- STL----nth_element
- 如何将PDF设置为只读?
- Linux桌面系统远程访问全解析
- 省级应急指挥平台建设方案
- NodeJS运行时抛出: Error: listen EADDRINUSE :::3000
- 基于神经网络的系统辨识,神经网络的种类和特点
- matlab中options,[转载]Matlab优化函数中options选项的修改
- 基于8253、8255芯片汇编实现简易电子琴
热门文章
- 【mud】进场景自动对话函数(clubpoem.c)
- 【华为云深度学习(Windows操作版)】
- Stack cookie instrumentation code detected a stack-based buffer overrun.
- 河道非法采砂识别系统 yolov5
- 蓝牙耳机台湾NCC认证怎么办理?
- 【每日一好题】官方题解看不懂,别怕我教你吊打官方题解:重新格式化电话号码
- 关于LIS(普通方式及二分查找方式)
- 应用软件提示服务器正在运行,Win10开机提示服务器正在运行中怎么办?
- 演艺现场网络直播碰到的问题
- 创业阶段敏捷开发产品原型