7

根据dask 文档,可以通过以下三种方式之一指定块:

  • 像 1000 这样的块大小
  • 像 (1000, 1000) 这样的块状
  • 沿所有维度的所有块的显式大小,例如 ((1000, 1000, 500), (400, 400))

您的块输入将被规范化并以第三种也是最明确的形式存储..

在尝试使用可视化()函数了解块的工作方式之后,我仍然不确定一些事情:

如果输入是标准化的,我选择哪种输入形式有关系吗?

Blocksize表示每个块的大小为 X,即1000。blockshape输入指定了什么?

给出块形输入时,参数的顺序会有所不同吗?它与数组/矩阵的形状有什么关系?

4

1 回答 1

10

该列表中较低的形式更明确,并允许您的块形状更大的不对称性。

例子

我们将通过chunks以下数组的一系列示例来讨论这个问题:

1 2 3 4 5 6
7 8 9 0 1 2
3 4 5 6 7 8
9 0 1 2 3 4 
5 6 7 8 9 0 
1 2 3 4 5 6

我们展示了不同chunks的参数如何将数组拆分为不同的块

chunks=3

大小为 3 的对称块

1 2 3  4 5 6
7 8 9  0 1 2
3 4 5  6 7 8

9 0 1  2 3 4 
5 6 7  8 9 0 
1 2 3  4 5 6

chunks=2

大小为 2 的对称块

1 2  3 4  5 6
7 8  9 0  1 2

3 4  5 6  7 8
9 0  1 2  3 4 

5 6  7 8  9 0 
1 2  3 4  5 6

chunks=(3, 2)

不对称但重复的大小块(3, 2)

1 2  3 4  5 6
7 8  9 0  1 2
3 4  5 6  7 8

9 0  1 2  3 4 
5 6  7 8  9 0 
1 2  3 4  5 6

chunks=(1, 6)

不对称但重复的大小块(1, 6)

1 2 3 4 5 6

7 8 9 0 1 2

3 4 5 6 7 8

9 0 1 2 3 4 

5 6 7 8 9 0 

1 2 3 4 5 6

chunks=((2, 4), (3, 3))

非对称和非重复块

1 2 3  4 5 6
7 8 9  0 1 2

3 4 5  6 7 8
9 0 1  2 3 4 
5 6 7  8 9 0 
1 2 3  4 5 6

chunks=((2, 2, 1, 1), (3, 2, 1))

非对称和非重复块

1 2 3  4 5  6
7 8 9  0 1  2

3 4 5  6 7  8
9 0 1  2 3  4 

5 6 7  8 9  0 

1 2 3  4 5  6

讨论

后面的例子很少由用户提供原始数据,而是来自复杂的切片和广播操作。通常我使用最简单的形式,直到我需要更复杂的形式。块的选择应与您想要执行的计算保持一致。

例如,如果您计划沿第一个维度取出薄片,那么您可能希望使该维度比其他维度更薄。如果你打算做线性代数,那么你可能需要更多的对称块。

于 2016-01-20T15:46:22.550 回答