我希望验证我对python对象在此示例中的行为方式的理解。
假设我在内存有限的笔记本电脑上有一个非常大的netcdf4数据集,例如无限维度中的一百万个点,即“时间”,单位为秒,自2015-11-12 16:0:8.000000 0:00 。我想作为日期时间对象访问第一次和最后一次没有加载内存中的所有值。
现在我知道我可以使用以下代码获取第一个和最后一个日期作为datetime对象:
import netCDF4 as nc4
from netCDF4 import Dataset
cdf = Dataset(fname,mode="r",format='NETCDF4')
time_var = cdf.variables['time']
dtime = nc4.num2date(time_var[0:10],time_var.units)
print('data starts at %s' % dtime[0])
印刷声明给了我我想要的东西:
“数据从2015-11-12 16:00:08开始”
现在python将所有'time'数据加载到内存中才能执行此操作?或者,正如我已经了解到使用MATLAB,cdf现在是指向打开文件中'time'变量的指针。
非常感谢, Marinna
答案 0 :(得分:2)
是的,cdf是打开文件的指针或视图,而不是内存中的副本。这个答案讨论了这一点 https://stackoverflow.com/a/4371049/1211981 正如@bart所提到的,你应该使用:
dtime = nc4.num2date(time_var[0],time_var.units)
和
dtime2 = nc4.num2date(time_var[-1],time_var.units)
获得你想要的时间。没有大的副本进入记忆。