首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何将dask数组逐片保存为.png文件?

如何将dask数组逐片保存为.png文件?
EN

Stack Overflow用户
提问于 2019-02-10 18:49:00
回答 2查看 118关注 0票数 1

我正在运行一个机器学习管道,用于分割非常大的3D图像。我想将结果(dask数组)存储为.png文件,每个文件对应于dask数组的一个片段。你对如何实现这一点有什么建议吗?

我一直在尝试通过使用joblib dask并行后端构建一个并行for循环来保存结果,然后逐个切片地循环结果。这可以很好地工作,直到我的管道在没有任何明显原因(没有内存问题,没有太多打开的文件描述符等)的情况下被卡住。

已使用client.persist()将array_to_save持久化到内存中

代码语言:javascript
代码运行次数:0
运行
复制
with joblib.parallel_backend('dask'):
    joblib.Parallel(verbose=100)(joblib.delayed(png_sav)(j, stack_height, client.compute(array_to_save[j])) for j in range(stack_height))

def png_sav(j, stack_height, prediction):

    img = Image.fromarray(prediction.result().astype('uint32'), 'I') # I to save as 16 bit binary image
    img.save(png_pn+str(j)+'_slice_prediction.png', "PNG")
    img.close()
EN

回答 2

Stack Overflow用户

发布于 2019-02-20 08:59:38

您可以考虑使用以下两种方法之一:

  1. map_blocks方法在每个数据块上调用一个函数。如果你的函数想知道它在堆栈中的位置,它可以接受block_info=关键字参数。
  2. 将你的数组转换为延迟的数组列表。也许是这样的(未经测试,你应该在这里阅读文档)

X= x.rechunk((1,None,None)) #沿第一轴的许多分块切片= x.to_delayed().flatten()保存= dask.delayed(numpy_array_to_png)(slc,filename='...')对于slices中的slc,请使用dask- dask.compute(*saves)

的东西

票数 0
EN

Stack Overflow用户

发布于 2019-02-22 20:13:58

非常感谢你的提示。我正在尝试了解如何使用.map_blocks(),尤其是block_info=。但我不明白如何使用block_info提供的信息。我想单独保存每个块,但不知道如何做到这一点。有什么提示吗?非常感谢!

代码语言:javascript
代码运行次数:0
运行
复制
da.map_blocks(png_sav(stack_height, prediction, 
                  block_info=True), dtype='uint16')

def png_sav(stack_height, prediction, block_info=True):

    # I don't get how I can save each chunk separately
    img = Image.fromarray("prediction_chunk".astype('uint32'), 'I') # I to save as 16 bit binary image
    img.save(png_pn+str(j)+'_slice_prediction.png', "PNG")
    img.close()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54615625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档