【语言转换】matlab quantile (matrix(:),value) 形式idl实现

来源:互联网 发布:淘宝联盟之类的软件 编辑:程序博客网 时间:2024/05/16 12:28

quantile 方法是用来求分位数,详情见帮助文档,本文中实现的方法适用于quantile (matrix(:),value) 这种形式,里面用到的percentile方法就是之前发的那个博文里的方法。

求解的结果是个1列,value行的矩阵。测试数据也放在前面隐掉的部分里。

FUNCTION quantile,qudata,quvalue;matlab quantile (matrix(:),value)参数形式  ;qudata=[[0,1,2,3,4],[5,4,3,2,1],[2,3,4,5,6],[3,3,3,3,3]]  ;qudata=[2,4,6]  ;Temp=[1,2,3,4,5]  ;quvalue=6   ;quresult=dblarr(1,quvalue)  ;for i=0,quvalue-1 do begin  ;  quresult[0,i]=percentile(transpose(qudata),100*i/quvalue);quresult[0,i]    ;print,a  ;endfor    cols = n_elements(qudata[*,0])  rows = n_elements(qudata[0,*])  tmpn=0  tmpdata=dblarr(1,cols*rows)  for j=0,rows-1 do begin    for k=0,cols-1 do begin      tmpdata[0,tmpn]=qudata[k,j]      tmpn++    endfor  endfor  if quvalue lt 1 then begin    quresult=0.0    quresult=percentile(tmpdata,quvalue*100)  endif  if quvalue eq 1 then begin    quresult=0.0    quresult=percentile(tmpdata,100)  endif  if quvalue gt 1 then begin    quresult=dblarr(1,quvalue)    for i=0,quvalue-1 do begin      ;b=(100*(1+i))/((quvalue+1)*1.)      quresult=percentile(tmpdata,(100*(1+i))/((quvalue+1)*1.));quresult[0,i]      ;print,a    endfor  ;a=percentile(tmpdata,[33,66])  endif     return,quresultEND