2012-07-30 162 views
0
import numpy 
import tables 

file = tables.openFile("....hdf5","r") 
lon = numpy.array(file.root.lon) 
lon.ravel() 
lat = numpy.array(file.root.lat) 
lat.ravel() 
data = numpy.array(file.root.data) 

v0= data.shape[0] 
v1= data.shape[1] 
v2= data.shape[2] 
wind_spectrum_flat = data.reshape((v0, v1*v2)) 

interval_spectrum = numarray.arange(30) + 0.5 
speed_mean = numarray.dot(interval_spectrum, wind_spectrum_flat)/days/24. 
value = numarray.reshape(speed_mean, (v1, v2)) 
value.ravel() 

打印lat.shape,lon.shape,value.shape使用hdf5的numpy.savetxt格式化?

(480640)(480640)(307200)

output = numpy.column_stack((lon,lat,value)) 

的輸出是這樣的:

1.131087052608466621e+02 2.245298999778770010e+01 3.922619047619047450e+001.131096961042312046e+02 2.245299666446372910e+01 

我如何格式化它們以在每一行中獲得三個數字(不科學)列?即:

11310870 224529 3.922 
11310969 224529 4.512 
11320485 223643 5.332 
... 

回答

4

您可以使用savetxt FMT關鍵字這樣:

numpy.savetxt(out_name,output, fmt="%u %u %.3f") 

您將輸出2個整數和一個浮子與小數點前3位這樣。

爲了確保每個矢量的具有正確的矢量形狀(一維陣列),就可以在代碼中替換:

x = x.flat 

由:

x.ravel() 

其中X可以成爲你的lon,lat和數據向量。

+0

thx!但它仍然在一行中打印三個以上的元素。 – oops 2012-07-30 08:06:30

+0

或者如何強制它每三個元素換成一個新行? – oops 2012-07-30 08:09:33

+0

好的,我想我明白了什麼地方出了問題。更新了我的答案。 – 2012-07-30 08:54:37