【发布时间】:2016-01-19 16:37:26
【问题描述】:
好的。下面是完整的代码。我想循环两个不同的数据集,每个数据集一年。获取每个冰雹概率值的 hailindx 值百分位数并绘制它们。由于我需要循环这两个 1 年的数据集,但速度非常慢。
from matplotlib import pyplot as plt
from matplotlib import mlab
import netCDF4 as net
import numpy as np
import itertools days=["01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31"]
months=["01","02","03","04","05","06","07","08","09","10","11","12"]
hp_values=range(0,100)
for value in hp_values:
value1=[]
print value
for month,day in itertools.product(months,days):
print month,day
try:
hailindx1="/Trunk/2015HailIndx/HailIndx2015%s%sL0S_CONUS.nc"%(month,day)
hailprob1="/Trunk/2015/aerHailProb2015%s%s.nc" %(month,day)
hailindx=net.Dataset(hailindx1)
hailprob=net.Dataset(hailprob1)
hp=hailprob.variables['HailProb'][:]
hs=hailindx.variables['HailIndx'][:]
p=[0.05,0.1,0.2]
hp=np.array(hp)
hs=np.array(hs)
mask=(hp>0) & (hs>0)
hs=hs[mask]
hp=hp[mask]
value2=hs[hp==value]
if len(value2)>0:
value1.append(value2)
else:
continue
except:
continue
value_list=[value,value,value]
print value_list
if len(value1)>0:
perc=np.percentile(value1,p)
plt.plot(value_list,perc,marker='o',color='r')
else:
continue
plt.xlabel('HailProb')
plt.ylabel('HailIndx')
plt.show()
如果有人知道如何使循环更快。
【问题讨论】:
-
速度慢是因为循环还是因为你在循环内做了什么?
-
itertools.product 不会提供加速...仅供参考
-
你是对的,刚刚试了,还是一样的..... :(
-
它很慢,因为你对月/日所做的事情......迭代这几乎是即时的
-
你想用几个月和几天的时间来说它太慢了?