您的位置:首页 > 产品设计 > UI/UE

pandas+numpy ufunc重写question2计算位温

2015-07-05 09:49 399 查看
# -*- coding: utf-8 -*-
"""
Created on Fri Jul 03 14:15:43 2015

@author: wawatou83
"""

import pandas as pd
import numpy as np
import os

InputDir = r'D:\R\P'

rootdir = InputDir
#初始化速度和角度以高度层
suduDfInitial=pd.DataFrame({'Height':range(100,6000,60)})
jiaoduDfInitial=pd.DataFrame({'Height':range(100,6000,60)})
#获得高度矩阵
heightArray = suduDfInitial.values
#常量
R = 6371300
fi = 27.79
f = 2 * 7.292 * 10 ** (-5) * np.sin(27.8)
#定义计算P函数
def calP(h):
#带有float的运算结果也是float,否则全int的结果也为int牺牲了精度
a =  float(R) * h / (R + h)
b = (1 + float(h)/R ) ** 2
c = 1 - 0.00259 * np.cos(2 * float(fi) * np.pi / 180)
p = 9.80616 * c * b * a / 9.80665
return p

calP_ufunc = np.frompyfunc(calP,1,1)
P = calP_ufunc(heightArray)
#P的type为Object,转换为float
P = P.astype(np.float)
print P

deltaP =  P[:-1] - P[1:]
averP = 0.5 * ( P[:-1] + P[1:] )
C = (averP / deltaP) *( f / 287.05 )
print C
#遍历文件夹,共计有360个时刻数据txt,得到jiaodu和sudu的矩阵
for parent,dirnames,filenames in os.walk(rootdir):

for filename in filenames:

df=pd.read_csv(os.path.join(parent,filename),skiprows=3,header=None,nrows=99,sep=' ')

jiaodulocaldf = jiaoduDfInitial
jiaodupieces=[jiaodulocaldf,df.replace('/////',np.nan).iloc[:,1]]
jiaoduDfInitial=pd.concat(jiaodupieces,axis=1,ignore_index=True)

sudulocaldf = suduDfInitial
sudupieces=[sudulocaldf,df.replace('/////',np.nan).iloc[:,2]]
suduDfInitial=pd.concat(sudupieces,axis=1,ignore_index=True)
jiaoduDfInitial.to_csv('jiaodu.txt')
suduDfInitial.to_csv('sudu.txt')
sudu = suduDfInitial.values
jiaodu = jiaoduDfInitial.values
print sudu,jiaodu
#定义位温计算函数,用到数组的元素级别计算
def calWD(c,sudu1,sudu2,jiaodu1,jiaodu2):

wd = c * float(sudu1) * float(sudu2)* np.sin((float(jiaodu1) - float(jiaodu2)) * np.pi / 180)

return  wd

calWD_ufunc = np.frompyfunc(calWD,5,1)
WD = calWD_ufunc(C,sudu[:-1,1:],sudu[1:,1:],jiaodu[:-1,1:],jiaodu[1:,1:])
print WD
WDdf = pd.DataFrame(WD)
WDdf.replace(np.nan,9999).to_csv('wd.txt')
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: