我怀疑如果您的函数返回与它消耗的维相同的数组,您的体验会更流畅。例如,您可以考虑如下定义函数:
def my_polyfit(data): return np.polyfit(data.squeeze(), ...)[:, None, None, None]
然后,您可能会忽略
new_axis,
drop_axis位。
在性能方面,您可能还想考虑使用更大的块大小。如果每个块有6000个数字,那么您将有超过一百万个块,这意味着与实际计算相比,您可能会花费更多的时间进行调度。通常,我会拍摄几兆字节的块。当然,增加块大小会导致映射函数变得更加复杂。
例In [1]: import dask.array as daIn [2]: import numpy as npIn [3]: def f(b): return np.polyfit(b.squeeze(), np.arange(5), 3)[:, None, None, None] ...:In [4]: x = da.random.random((5, 3, 3, 3), chunks=(5, 1, 1, 1))In [5]: x.map_blocks(f, chunks=(4, 1, 1, 1)).compute()Out[5]: array([[[[ -1.29058580e+02, 2.21410738e+02, 1.00721521e+01], [ -2.22469851e+02, -9.14889627e+01, -2.86405832e+02], [ 1.40415805e+02, 3.58726232e+02, 6.47166710e+02]], ...
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)