【问题标题】:How dask array chunking works for three or more dimension?dask 数组分块如何用于三个或更多维度?
【发布时间】:2020-02-15 16:48:49
【问题描述】:

考虑下面的代码 sn-p,我试图在其中创建一个具有不对称但重复大小的块 (3, 4, 5) 的 dask 数组:

import numpy as np
import dask.array as da
a = np.random.randint(0, 9, (3, 12, 10))
d = da.from_array(a, chunks=(3, 4, 5))

上面的 sn-p 不会抛出任何错误/警告。但是当我尝试执行以下操作时:

r = d.map_blocks(np.sum)
out = r.compute()

它会抛出以下错误:

python3.7/site-packages/dask/array/core.py in <listcomp>(.0)
   4099 
   4100     while isinstance(arrays, (list, tuple)):
-> 4101         result.append(tuple([shape(deepfirst(a))[dim] for a in arrays]))
   4102         arrays = arrays[0]
   4103         dim += 1

IndexError: tuple index out of range

我做错了什么?

【问题讨论】:

    标签: python arrays multidimensional-array dask


    【解决方案1】:

    如果您查看map_block 文档here。在chunks参数说明下,它说:

    “如果未提供,则假定结果数组与第一个输入数组具有相同的块结构。”

    所以你的sum 函数应该是这样的:

    def compute_block_sum(block):
        return np.array([[np.sum(block)]])[:,None]
    

    那你就做

    d.map_blocks(compute_block_sum).compute()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-26
      相关资源
      最近更新 更多