假设我生成一个形状取决于某些计算的数组,例如:
>>> import dask.array as da
>>> a = da.random.normal(size=(int(1e6),10))
>>> a = a[a.mean(axis=1) > 0]
>>> a.shape
(nan,10)
>>> a.chunks
((nan,nan,nan),(10,))
>>> a.chunksize
(nan,10)
南是预期的.当我将计算结果保留在繁琐的工作程序上时,我会假定已经丢失了此丢失的元数据,但显然并非如此:
>>> a_persisted = a.persist()
>>> a_persisted.chunks
((nan,))
>>> a_persisted.chunksize
(nan,10)
>>> a_persisted.shape
(nan,10)
如果我尝试强制重新压缩,我会得到:
>>> a_persisted.rechunk("auto")
Traceback (most recent call last):
File "<ipython-input-26-31162de022a0>",line 1,in <module>
a_persisted.rechunk("auto")
File "/home/ogrisel/code/dask/dask/array/core.py",line 1647,in rechunk
return rechunk(self,chunks,threshold,block_size_limit)
File "/home/ogrisel/code/dask/dask/array/rechunk.py",line 226,in rechunk
dtype=x.dtype,previous_chunks=x.chunks)
File "/home/ogrisel/code/dask/dask/array/core.py",line 1872,in normalize_chunks
chunks = auto_chunks(chunks,shape,limit,dtype,previous_chunks)
File "/home/ogrisel/code/dask/dask/array/core.py",line 1949,in auto_chunks
raise ValueError("Can not perform automatic rechunking with unknown "
ValueError: Can not perform automatic rechunking with unknown (nan) chunk sizes
用已在工作程序中计算出的块的实际大小来更新数组的元数据的惯用方式是什么?
我可以使用以下方法非常便宜地计算它们:
>>> dask.compute([chunk.shape for chunk in a_persisted.to_delayed().ravel()])
([(100108,10),(99944,(99545,(99826,(100099,10)],)
我的问题是如何获得一个新的dask数组,该数组由具有一些信息性的.shape,.chunk和.chunksize属性(无nans)的相同块支持.
>>> dask.__version__
'1.1.0+9.gb1fef05'
最佳答案
今天没有一个很好的解决方案,但是有可能.如果不存在,我建议提出一个问题.这是通常要求的功能.
编辑:这是在这里跟踪:https://github.com/dask/dask/issues/3293
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。