这使用公共API目前不可能。此信息是可用私有API。如果你看一下DataArray.variable._data
从磁盘加载一个数组,你会看到一个MemoryCachedArray
对象(如xarray V0.9的),如果它被缓存:
>>> xarray.DataArray([[1, 2], [3, 4]]).to_netcdf('foo.nc')
>>> array = xarray.open_dataarray('foo.nc')
>>> array.variable._data
MemoryCachedArray(array=CopyOnWriteArray(array=LazilyIndexedArray(array=ScipyArrayWrapper(array=array([[1, 2],
[3, 4]], dtype=int32)), key=(slice(None, None, None), slice(None, None, None)))))
如果数据足够大,您担心关于缓存存在问题,我绝对推荐使用cache=False
打开任何文件,例如xarray.open_dataarray('foo.nc', cache=False)
。在这种情况下,你不会看到在_data
的MemoryCachedArray
对象:
>>> array.variable._data
CopyOnWriteArray(array=LazilyIndexedArray(array=ScipyArrayWrapper(array=array([[1, 2],
[3, 4]], dtype=int32)), key=(slice(None, None, None), slice(None, None, None))))
如果你仍然认为你需要能够检查是否缓存有可能在现有xarray对象,请提高我们的GitHub页面上的问题讨论潜在的新API。
我实际上并不认为这在xarray目前使用公共API是可能的。 @shoyer会有一个明确的答案。 – jhamman