这是与此问题相关的后续问题。
感谢之前的帮助,我已经成功导入了一个 netCDF 文件(或带有 MFDataset 的文件),并且能够将不同的时间相互比较以创建另一个累积数据集。这是当前代码的一部分。
from numpy import *
import netCDF4
import os
f = netCDF4.MFDataset('air.2m.1979.nc')
atemp = f.variables['air']
ntimes, ny, nx = atemp.shape
cold_days = zeros((ntimes, ny, nx), dtype=int)
for i in range(ntimes):
for b in range(ny):
for c in range(nx):
if i == 1:
if atemp[i,b,c] < 0:
cold_days[i,b,c] = 1
else:
cold_days[i,b,c] = 0
else:
if atemp[i,b,c] < 0:
cold_days[i,b,c] = cold_days[i-1,b,c] + 1
else:
cold_days[i,b,c] = 0
这似乎是完成工作的蛮力方式,虽然它有效,但需要很长时间。我不确定这是否需要这么长时间,因为我正在处理 365 349x277 矩阵(35,285,645 像素),或者与某些内置的 python 方法相比,我的旧学校蛮力方法是否简单。
下面是我认为代码正在做什么的一个例子。如果 temp < 0,它会查看 Time 并增加冷天数。如果 temp >= 0,则冷天数会重置为 0。在下图中,您将看到第 2 行第 1 列的单元格每次经过的时间都会增加,但单元格位于第 2 行第 2 列在时间 1 增加,但在时间 2 重置为零。
有没有更有效的方法来翻阅这个 netCDF 数据集来执行这种类型的操作?