python-如何使用Nan维更新dask数组的形状,块和块大小元数据

前端之家收集整理的这篇文章主要介绍了python-如何使用Nan维更新dask数组的形状,块和块大小元数据 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

假设我生成一个形状取决于某些计算的数组,例如:

>>> 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

原文链接:https://www.f2er.com/python/533173.html

猜你在找的Python相关文章