我正在尝试从包含与对应[time][long][lat]
的尺寸对应的3维数组的文件中删除值。
我每年的数据都有单独的文件。我有一个观察到的数据点列表T_obs
,持续时间为start_time_index
到end_time_index
,我希望将其与文件数据中该时间段的平均值进行比较。
文件中包含的数据集足够大,我的代码运行速度非常慢,我想优化执行时间。我目前的代码如下。有什么办法可以大大节省时间吗?
T_obs = [1.5, 3.6, 4.5]
start_time_index = [20, 300, 10]
end_time_index = [40, 328, 200]
long_obs = [45, 54, 180]
lat_obs = [34, 65, 32]
LE = np.zeros(len(T_obs))
t = 1984
for filename in os.listdir("C:\\Directory"):
if filename.endswith(".nc"):
print(filename)
fh = Dataset("C:\\Directory %s"
% filename, 'r').variables['matrix']
for i in range(0, len(long_obs)):
if year[i] == t and start_time_index[i] > 0:
LE_t = []
for x in range(int(start_time_index[i]), int(end_time_index[i])):
LE_t = np.append(LE_t,float(fh[x][long_obs[i]+180][lat_obs[i]*-1+90])/10)
LE[i] = np.mean(LE_t)
t += 1
continue
else:
continue
答案 0 :(得分:0)
您打算多次(使用不同的值)进行此类工作,还是只进行一次?
如果是前者,您可以尝试将文件数据放入数据库(例如MySQL,这很容易设置)并在开始和结束时间创建索引。这将使您的读取速度更快,因为您不需要进行全表扫描(这与您通过读取整个文件所做的非常相似)。
如果你只做一次,那么我建议你等一下。没有什么简单的方法可以让I / O(这是你的瓶颈)更便宜,而且看起来像是在检查/比较数据,你实际上需要遍历整个数据集。