我目前正在尝试将一个大的多维数组(> 5 GB)加载到 python 脚本中。由于我将数组用作机器学习模型的训练数据,因此以小批量有效加载数据但避免将整个数据集加载到内存中一次非常重要。
我的想法是使用xarray库。我用X=xarray.open_dataset("Test_file.nc")
. 据我所知,此命令不会将数据集加载到内存中——到目前为止,一切都很好。但是,我想X
使用命令转换为数组X=X.to_array()
。
我的第一个问题是:是否X=X.to_array()
将其加载到内存中?
如果这样做了,我想知道如何最好地将小批量加载到内存中。数组的形状是 (variable,datetime,x1_position,x2_position)。我想在每个日期时间加载小批量,这将导致:
ind=np.random.randint(low=0,high=n_times,size=(BATCH_SIZE))
mini_batch=X[:,ind]
另一种方法是在使用之前转置数组X.transpose("datetime","variable","x1_position","x2_position")
,然后通过以下方式进行采样:
ind=np.random.randint(low=0,high=n_times,size=(BATCH_SIZE))
mini_batch=X[ind,:]
我的第二个问题是:
转置 xarray 会影响索引效率吗?更具体地说,是否X[ind,:]
需要只要X[:,ind]
?