我有HDF5格式一些生每天海風數據,想知道如何使用numpy的把它們轉換成風速和風向?HDF5陣列提取和轉化率與NumPy
原始每天海風數據存儲在兩個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)
之後,我需要創建另一個包含經度,緯度和每小時風速和風向(s,d)信息的HDF5文件。
非常感謝!
我試着用下面的代碼,但它不工作:
>>> 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
是的,我的意思是弧度和thx的。我對編程非常陌生,所以如果有人可以發佈很棒的代碼。但任何建議或提示也會對我有所幫助。 –
我混淆了自己,uv2sd的輸入應該是(u,v)。但是我又得到了同樣的錯誤,再次說只有長度爲1的數組可以轉換爲python標量 –
你應該嘗試'numpy.sqrt'和'numpy.arctan2 '。他們可以處理u和v的數組,而不僅僅是標量u和v'math.sqrt'所期望的 – yosukesabai