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')
相关文章推荐
- Quartz.NET - Quartz.NET Quick Start Guide
- Quartz.NET - Quartz.NET Quick Start Guide
- 配置Alibaba druid实践和总结
- [ngRepeat:dupes] Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys
- android build过程中的问题
- nyoj 1100 WAJUEJI which home strong!
- A ResourcePool could not acquire a resource from its primary factory or source.
- Leetcode 之 Unique Binary Search Trees
- Fast digital I/O for Arduino
- UIView常用操作
- jd-gui或jad反编译工具气死人不偿命的bug
- iOS动力学UIDynamic讲解(一)
- request exceeds 8192 bytes
- UIColor
- Android UI - 实现广告Banner旋转木马效果
- UIAlertView,UIActionSheet的使用
- UIActivityIndictorView的使用
- UILabel和UIImageView的使用
- 安卓控件注入
- iOS开发-UI 从入门到精通(一)