我有一些 HDF5 格式的原始每日海风数据,想知道如何使用 Numpy 将它们转换为风速和风向?</p>
原始的每日海风数据存储在两个 HDF5 文件中:u.hdf5 和 v.hdf5。每个HDF5文件包含三个内容:纬度、经度、u(或v)。u(或v)数组是3D的,0维表示小时(0:00-24:00)。我需要做的是将 u 和 v 数组切片为每小时(即 0:00-1:00),然后使用以下代码将它们转换为风速和风向:
#!/usr/bin/python2
import os
import sys
import math
def d2r(degree):
radian = degree * math.pi / 180.0
return (radian)
def r2d(radian):
degree = radian * 180.0 / math.pi
return (degree)
def uv2sd(u,v):
s = math.sqrt((u*u)+(v*v))
radian = math.atan2(u,v)
degree = r2d(radian)
if degree < 0:
degree = 360 + degree
return (s,d)
之后,我需要创建另一个 HDF5 文件,其中包含纬度、经度和每小时风速和风向 (s,d) 信息。
非常感谢!
我尝试使用下面的代码,但没有奏效:
>>> import numpy
>>> import h5py
>>> import os
>>> import sys
>>> import math
>>> a=h5py.File('D:/Wind/u_100m/20100101.hdf5','r')
>>> b=a['u'].value
>>> c=b[0,:,:]
>>> cu=c
>>> d=h5py.File('D:/Wind/v_100m/20100101.hdf5','r')
>>> e=d['v'].value
>>> f=e[0,:,:]
>>> fv=f
>>> u=cu.reshape(-1)
>>> v=fv.reshape(-1)
>>> def d2r(d):
r=d*math.pi/180.0
return(r)
>>> def r2d(r):
d=r*180.0/math.pi
return(d)
>>> def uv2sd(u,v):
s=math.sqrt((u*u)+(v*v))
d=math.atan2(u,v)
if d<0:
d=360+d
return (s,d)
>>> print uv2sd(u,v)
Traceback (most recent call last):
File "<pyshell#55>", line 1, in <module>
print uv2sd(u,v)
File "<pyshell#54>", line 2, in uv2sd
s=math.sqrt((u*u)+(v*v))
TypeError: only length-1 arrays can be converted to Python scalars