我正在分析来自气候模型模拟的海洋温度数据,其中 4D 数据阵列(时间、深度、纬度、经度;dask_array
如下所示)通常具有 (6000, 31, 189, 192) 的形状和约 25GB 的大小(因此我希望使用 dask;我一直在尝试使用 numpy 处理这些数组时遇到内存错误)。
我需要在每个级别/纬度/经度点沿时间轴拟合三次多项式并存储得到的 4 个系数。因此chunksize=(6000, 1, 1, 1)
,我设置了每个网格点都有一个单独的块。
这是我获取三次多项式系数的函数(time_axis
轴值是在别处定义的全局 1D numpy 数组):
def my_polyfit(data):
return numpy.polyfit(data.squeeze(), time_axis, 3)
(所以在这种情况下,numpy.polyfit
返回一个长度为 4 的列表)
这是我认为需要将其应用于每个块的命令:
dask_array.map_blocks(my_polyfit, chunks=(4, 1, 1, 1), drop_axis=0, new_axis=0).compute()
因此时间轴现在消失了(因此drop_axis=0
),并且在它的位置有一个新的系数轴(长度为 4)。
当我运行这个命令时,我得到IndexError: tuple index out of range
了,所以我想知道我在哪里/如何误解了map_blocks
?